SQL用于选择和排序条件

时间:2013-06-16 05:56:43

标签: mysql sql

在我目前的代码中,

$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`";

我有两个表,newsnews_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以正确获取结果?

2 个答案:

答案 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小提问你的答案

see you example