如何在嵌套查询中强加正确的排序

时间:2012-04-20 23:27:05

标签: mysql sql

我有两个表,一个项目和一个标记项目的用户。这是一个例子:

items:                              flags:

item_id | item_name | owner_id      item_id | flagged_by
------------------------------      --------------------
1       | foo       | 1             1       | 2
2       | bar       | 2             2       | 4
3       | baz       | 2             2       | 7
                                    2       | 7

我想从项目表中选择有关标志表中所有项目的信息,按标志数量排序。所以对于上面的例子,我想要的输出是

item_id | item_name | owner_id
------------------------------
2       | bar       | 2
1       | foo       | 1

我现在的查询是select * from items where id in (select item_id from flags group by item_id order by count(*) desc);

我知道内部查询正常工作(以正确的顺序返回所有ID)但是当我运行整个查询时,我只是按项目ID的顺序获取项目。如何修复查询?

1 个答案:

答案 0 :(得分:1)

您目前只订购子查询,这对外部查询的顺序没有影响。如果您加入表而不是使用子查询,则应该能够对整个查询应用订单:

  select i.*
    from items i
    join flags f on i.item_id = f.item_id
group by i.item_id
order by count(f.item_id) desc

演示:http://www.sqlfiddle.com/#!2/f141b/2