我目前正在一个新闻数据库网站上工作,我似乎无法创建一个查询来选择 5 篇 HitTest 门的新闻文章。受此查询影响的数据库的 2 个表是:
- 新闻 - 包含所有新闻项目(id、作者、消息等)
- Rates - 包含新闻项的所有评级(id、news_id、rating 等)
现在我的查询应该从表 Rates 中选择平均评级最高和投票最多的 5 个 news_id(因此:我认为按 AVG(Rating) 和 COUNT(*) 排序)。我首先尝试进行查询并立即从新闻表中获取这些 news_ids 的所有信息(使用 WHERE id IN(--查询选择 5 个 HitTest 门的 news_ids--) 子句)但是返回了我的 MySql 版本的错误不能在 WHERE IN 子句子查询中使用 LIMIT。
好吧,我希望你能帮助我解决必须选择这 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)");
最佳答案
您确定 average_r 和 amt_r 都按降序排列吗?
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 DESC, amt_r DESC
LIMIT 5
) AS news_rates
关于php - 一个有点复杂的mysql查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5211257/