我有两个表,一个项目和一个标记项目的用户。这是一个例子:
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的顺序获取项目。如何修复查询?
答案 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