@mxarts

Как правильно делать MYSQL join и сортировку?

Здравствуйте,
есть таблица hy_content в нем id,title,seo
есть таблица hy_views в нем id,read,seo

В "read" при каждом просмотре новости добавляется +1.
Связь между новостью и просмотрами этой новости осуществляет поле "seo".

Сейчас мне нужна грамотное реализация top10 по просмотрам новостей за 24 часа. Нужно объединить таблицы и подсчитать самые просматриваемые за 24 часа. С JOIN -ом думаю, но есть ли альтернатива или вообще как правильно это сделать.

Я реализовал запрос к БД но не знаю на сколько грамотно это сделал, посмотрите пожалуйста и есть ли вариант более правильно это сделать:

$sql = "select hy_content.seo,hy_content.id,hy_content.date,hy_content.sham_photos,hy_content.title from hy_content LEFT JOIN gl_views
ON hy_content.seo=gl_views.seo where hide='2' AND hy_content.date > NOW() - INTERVAL '1' DAY ORDER BY gl_views.read DESC LIMIT 10";
  • Вопрос задан
  • 3939 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Связь таблиц один-к-одному? Тогда грамотно будет держать всё в одной таблице. А так запрос нормально составлен.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
seriyPS
@seriyPS
Вы бы запрос отформатировали поаккуратнее - читать неудобно

SELECT hy_content.seo,
       hy_content.id,
       hy_content.date,
       hy_content.sham_photos,
       hy_content.title
FROM hy_content
LEFT JOIN gl_views ON (hy_content.seo=gl_views.seo)
WHERE hide=2
      AND hy_content.date > (NOW() - INTERVAL 1 DAY)
ORDER BY gl_views.read DESC
LIMIT 10

Запрос вполне нормальный, если вам нужно вывести именно новости, опубликованные сегодня, которые больше всего посмотрели (посмотрели за всё время, но т.к. всё время это и есть сегодня, то ок).
Если же нужно именно "самые просматриваемые за сегодня новости, неважно когда опубликованные", то нужно структуру таблиц менять. Т.е. если новость вышла год назад, а на неё вдруг именно сегодня зашла толпа народу.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы