Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
3 / 3 / 2
Регистрация: 16.01.2013
Сообщений: 471

Запрос для вывода топ списка новостей

14.10.2016, 08:11. Показов 1628. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте форумчане.
Хочу сделать блок с топом новостей. Допустим нужно вывести 5 новостей самых просматриваемых за день, неделю, месяц. Каждая новость имеет дату(date(Y-m-d)) создания и поле с кол-вом просмотров(views).
Понятно что можно сделать 3 разных запроса с BETWEEN по date и ордер по views, но это 3 запроса. Может существует вариант как это упростить?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.10.2016, 08:11
Ответы с готовыми решениями:

SQL запрос для вывода топ-10 пользователей
Доброго времени суток, помогите, пожалуйста, сформулировать запрос к таблице users в которой находятся данные пользователей сайта. У...

PHP запрос к DB для вывода новостей
Здравствуйте форумчане! Я не слишком знаком с PHP и прощу от вас помощи. Встал вопрос на вывод новостей из БД. Использую для подключения к...

Цикл для вывода новостей
Пытаюсь сделать цикл, который бы выводил краткое описание новости, но столкнулся с проблемой. При попытке выполнить этот цикл я получаю...

12
 Аватар для tarasalk
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
14.10.2016, 08:35
BETWEEN не нужен. Вряд ли у вас будут даты из будущего, поэтому достаточно ограничить с одной стороны.
Например получить данные за последний день:
MySQL
1
SELECT * FROM task WHERE date_create > NOW() - INTERVAL 1 day
А так да, нужно 3 запроса, они могут вернуть разные наборы данных. Если вас волнует производительность, то можно закешировать...
0
3 / 3 / 2
Регистрация: 16.01.2013
Сообщений: 471
14.10.2016, 08:49  [ТС]
Цитата Сообщение от tarasalk Посмотреть сообщение
Если вас волнует производительность, то можно закешировать...
Спасибо за совет, но дело в том, что ситуация на сайте меняется очень активно и уже при следующем обновлении страницы пользователем, ситуация с топом будет иная и тогда кэш будет показывать старые результаты. Можно конечно делать сравнения мол если изменилось что-то то чистить кэш и выводить из БД, но это опять таки дополнительные проверки и запросы. Да, меня конечно волнует производительность. Ведь пока на данный момент более 63 000 статей и выборку делать 3 раза и по такому объему, не думаю что будет слишком просто серверу, тем более что средняя посещаемость ресурса 6 000 человек
0
471 / 399 / 169
Регистрация: 04.01.2013
Сообщений: 1,675
14.10.2016, 09:20
Объединяйте 3 запроса в один через UNION
1
3 / 3 / 2
Регистрация: 16.01.2013
Сообщений: 471
14.10.2016, 09:21  [ТС]
Цитата Сообщение от СлаваВирус Посмотреть сообщение
Объединяйте 3 запроса в один через UNION
Что это даст и как разделять вывод потом?
0
 Аватар для tarasalk
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
14.10.2016, 09:26
Лучший ответ Сообщение было отмечено MirDj как решение

Решение

1) Можно основную страницу сразу загружать, а топы позже через ajax.
2) Можно показывать только один топ за раз, остальные загружать по требованию.
3) Совсем старые новости можно вынести в другую таблицу, в архив.

Цитата Сообщение от MirDj Посмотреть сообщение
уже при следующем обновлении страницы пользователем, ситуация с топом будет иная
Что то не верится. Если топ неактуален через несколько секунд, тогда зачем он вообще нужен. Не, конечно бывают ситуации, но в обычных новостях едва ли)
Можно кэшировать на разные периоды. Скажем топ за день на 5 минут. Топ за неделю на час. Топ за месяц на 3 часа.
1
3 / 3 / 2
Регистрация: 16.01.2013
Сообщений: 471
14.10.2016, 09:33  [ТС]
Цитата Сообщение от tarasalk Посмотреть сообщение
1) Можно основную страницу сразу загружать, а топы позже через ajax.
2) Можно показывать только один топ за раз, остальные загружать по требованию.
3) Совсем старые новости можно вынести в другую таблицу, в архив.
1. Как вариант, это снизит единовременное кол-во запросов.
2. Можно сделать переключалку и подгружать аяксом...
3. Слишком сложно, ведь на сайте идет пагинация и все новости, даже очень древние, доступны для просмотра.
0
471 / 399 / 169
Регистрация: 04.01.2013
Сообщений: 1,675
14.10.2016, 09:39
Цитата Сообщение от MirDj Посмотреть сообщение
Что это даст и как разделять вывод потом?
Ну один результирующий набор, один цикл, разделять вывод можно обычным for
Цитата Сообщение от MirDj Посмотреть сообщение
5 новостей самых просматриваемых за день, неделю, месяц
Без верстки сложно сказать, подходит ли такой вариант
0
3 / 3 / 2
Регистрация: 16.01.2013
Сообщений: 471
14.10.2016, 09:43  [ТС]
Цитата Сообщение от СлаваВирус Посмотреть сообщение
Без верстки сложно сказать, подходит ли такой вариант
ну вот пример реализации для одного дня:
PHP
1
2
3
4
5
6
7
8
9
10
11
 <?
$news_sql = $sql->query("select title,id,author,mo,da,ye,countViews from `".MY_PREFIX."_news` where public='0' and dateAdd > NOW() - INTERVAL 1 day order by  countViews DESC Limit 5");
 
 while ($Rows = $news_sql->fetch()) {
 
 $mounth=$Rows['mo'];
  $mounthName = makeDateName($mounth);
 ?>
    <div id="<?=$Rows['id']?>"><div  style=" display: inline-block;"><div  class="s22" style="display: inline-block;padding-left: 5px;">Автор: <b><?=$Rows['author']?></b><br /> Дата: <?=$Rows['da']?> <?=$mounthName?> <div class="Newsview"><?=$Rows['countViews']?></div></div><div  class="s22" style="display: inline-block;padding-left: 60px;"> <a href="/news/<?=$Rows['id']?>/" target="_blank" style="width:190px;word-wrap: break-word;"><?=$Rows['title']?></a></div><div style="padding-top:10px;border-bottom:1px solid #BDBDBD;width:240px;word-wrap: break-word;"></div><div style="width: 10px; display: inline-block;"></div></div></div>
    <?}?>
<
0
471 / 399 / 169
Регистрация: 04.01.2013
Сообщений: 1,675
14.10.2016, 09:46
Цитата Сообщение от MirDj Посмотреть сообщение
ну вот пример реализации для одного дня:
Я имел ввиду, что если все три блока по коду следуют друг за другом, то такой вариант удобен, если разнесены по странице, то 3 запроса, аяксом не аяксом решать вам
0
3 / 3 / 2
Регистрация: 16.01.2013
Сообщений: 471
14.10.2016, 09:48  [ТС]
Цитата Сообщение от СлаваВирус Посмотреть сообщение
се три блока по коду следуют друг за другом
Именно так...
0
 Аватар для tarasalk
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
14.10.2016, 09:50
Цитата Сообщение от MirDj Посмотреть сообщение
Слишком сложно, ведь на сайте идет пагинация и все новости, даже очень древние, доступны для просмотра.
Можно объединить две таблицы через представление и работать с виртуальной таблицей как с одной. А где архивные данные не нужны, использовать только облегченную таблицу.

На вашем месте я бы реализовал самый простой вариант, а потом бы уже думал о оптимизации. Может сдаться что проблемы то и нет, 63к записей это не много.
0
3 / 3 / 2
Регистрация: 16.01.2013
Сообщений: 471
14.10.2016, 12:37  [ТС]
Спасибо всем за советы, остановлюсь наверное на выводе и переключалке по аяксу
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.10.2016, 12:37
Помогаю со студенческими работами здесь

Топ новостей.
Здрасвуйте, хочу на сайте под управлением dle создать топ новостей по скачиванию. Проблема в том, что информация о новости и кол-ве...

Организация порядка вывода новостей
Здравствуйте! Помогите, пожалуйста, организовать порядок вывода новостей. Планирую создать базу данных, в которую буду помещать новости....

Долгое выполнение вывода новостей
Добрый вечер! Есть 2 скрипта: popular.php &lt;?php $sql_result = $db-&gt;query( &quot;SELECT id, title, date, alt_name, category,...

Запрос для вывода общих друзей пользователя
Есть база даных freinds: id | author_id | freind_id | status. Не подскажите, как сделать как в ВК общих друзей. Например, у вас с Мишей 5...

Какой прописать запрос для вывода данных
Добрый вечер. Возникла проблема: не могу реализовать следующий инструмент: Существуют 2 вкладки Отдел ОРК и Заказы. Когда во вкладке...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru