0

在我当前的代码中,

$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基于news_points名为points. 如果 anews没有分数或为负数,则将其放在“好”消息下方,即具有正数或至少不是负数的消息。

一些可能有帮助的架构。

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

基于上面的例子。新闻news_id=1将有 3 分,news_id=2将有 5 分,news_id=3将有 -2 分,因此在返回的行中,news_id 为 2 的新闻将排在第一位,news_id 为 1 的新闻将排在第二位,news_id 将排在最后。但如果他们都没有评级或只有一些评级,其余的只是以 news_id 降序显示。

我怎样才能编写此 SQL 以正确获得结果?

4

2 回答 2

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

另请参阅这个简短的演示

于 2013-06-16T06:06:03.913 回答
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 fiddle

见例子

于 2013-06-16T06:24:58.577 回答