0

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

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 的顺序获取项目。如何修复我的查询?

4

1 回答 1

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

于 2012-04-20T23:42:34.327 回答