В настоящее время я работаю над веб-сайтом базы данных новостей, и я не могу создать запрос для выбора 5 самых горячих новостных статей. 2 таблицы базы данных, на которые влияет этот запрос:
- Новости - содержит все новости (идентификатор, автор, сообщение и т. д.)
- Rates — содержит все рейтинги новостей (id, news_id, рейтинг и т. д.)
Теперь мой запрос должен выбрать 5 news_ids из таблицы Rates с самым высоким средним рейтингом и наибольшим количеством голосов (так что: упорядочено по AVG (Rating) и COUNT (*), как я полагал). Сначала я попытался сделать так, чтобы мой запрос также мгновенно получал всю информацию об этих news_ids из таблицы новостей (используя предложение WHERE id IN (- запрос, выбирающий 5 самых горячих news_ids--)), но это вернуло ошибку моей версии MySql. невозможность использования LIMIT внутри подзапроса предложения WHERE IN.
Что ж, надеюсь, вы поможете мне с первым запросом, который должен выбрать эти 5 news_id. Запрос, который я получил на данный момент (но не полностью рабочий):
SELECT news_id FROM
(SELECT news_id, AVG(rating) AS average_r, COUNT(*) AS amt_r
FROM rates
GROUP BY news_id
ORDER BY average_r,amt_r
DESC LIMIT 5
) AS news_rates
или в содержании остальной части моего сценария:
$get_hot_news_ids = mysql_query("SELECT news_id FROM
(SELECT news_id, AVG(rating) AS average_r, COUNT(*) AS amt_r
FROM rates
GROUP BY news_id
ORDER BY average_r,amt_r DESC LIMIT 5) AS news_rates");
$first = 1;
while($news_id = mysql_fetch_assoc($get_hot_news_ids)) {
if(!$first) {
$hot_news_ids .= " ,";
}else{
$first = 0;
}
$hot_news_ids .= $news_id['news_id'];
}
//print_r($hot_news_ids);
$get_hot_news = mysql_query("SELECT * FROM news
WHERE id IN($hot_news_ids)
ORDER BY FIELD(id, $hot_news_ids)");