在我目前的代码中,
$sql = "SELECT *, SUM(news_points.points) as `total`
CASE `total` WHEN 0 THEN ORDER BY `news_id` ASC
CASE `total` WHEN NOT 0 THEN ORDER BY `total` DESC
FROM `news`,`news_points`";
我有两个表,news
和news_points
。我想要做的是根据名为news
的{{1}}列选择news_points
。如果points
没有分数或者是负数,则将其置于“好”消息之下,这些消息具有正数或至少是负数。
某些可能有用的架构。
news
基于上面的例子。 news table
news_id -- news_title
1 -- New publication available.
2 -- Check out this new car!
3 -- Something else.
news_points table
point_id -- news_id -- point
1 -- 1 -- 2
2 -- 1 -- 5
3 -- 1 -- -4
4 -- 2 -- 5
5 -- 3 -- -2
的新闻将获得3分,news_id=1
将获得5分,news_id=2
将获得-2分,因此news_id 2的新闻将是第一,news_id 1的新闻将是第二和news_id将在返回的行中排在最后。但如果他们都没有评级或只有一些,其余的只是在news_id降序显示。
如何编写此SQL以正确获取结果?
答案 0 :(得分:3)
您的查询应如下所示:
$sql = "SELECT news.*, SUM(news_points.points) as total
FROM news left join news_points
ON news.news_id = news_points.news_id
GROUP BY news.news_id
ORDER BY total DESC, news.news_id ASC";
请参阅alsp, short demo 。
答案 1 :(得分:1)
你的问题有点难以理解。我尽力检查结果
select news.news_id, sum(point) as sum, news.* from
news left join news_points on news.news_id= news_points.news_id
group by news.news_id order by sum desc
也看到sql小提问你的答案