2012-04-20 132 views
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顺序获取项目。我如何解决我的查询?

+0

这看起来类似的问题,我最近询问。请参阅[链接] http://stackoverflow.com/questions/10131150/mysql-which-value-has-maximum-count [/ link]。 hth – geoB 2012-04-20 23:43:09

回答

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

+0

工作;谢谢! – Catherine 2012-04-21 00:08:25