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

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

14.10.2016, 08:11. Показов 1609. Ответов 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
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru