MySQL ORDER BY只返回一行

时间:2015-05-30 13:51:21

标签: mysql

这是我的代码:

SELECT * 
FROM Event_list 
WHERE interest in 
  (
   SELECT Interest_name 
   from Interest 
   where Interest_id in 
     (
      SELECT Interest_id 
      FROM `User's Interests` 
      where P_id=Pid and is_canceled=0
     )
  )
order by count(Eid) desc

我没有使用任何GROUP BY条款,但仍然只获得一行。删除ORDER BY子句时,我得到所有正确的行(但顺序不正确)。

我尝试返回按最常见Event_list(事件ID)排序的视图(名为Eid),但我希望看到每一行都没有任何分组。

3 个答案:

答案 0 :(得分:1)

我怀疑你想要的查询更像是这样:

SELECT el.*,
       (select count(*)
        from interest i join
             UserInterests ui
             on ui.is_canceled = 0 and ui.p_id = i.id
        where el.interest = i.interest_name
       ) as cnt
FROM Event_list el
ORDER BY cnt desc;

如果没有样本数据和更好的查询形式,就很难说清楚。一些说明:

  • 不要在表名和列名中使用特殊字符。不得不逃避名称只会导致难以阅读,书写和理解的查询。
  • 限定列名称,以便了解表格列的来源。
  • 使用表别名 - 因此查询更容易编写和阅读。
  • WHERE子句仅进行过滤。您对问题的描述似乎不涉及过滤,只是订购。
  • 每次使用聚合函数时,查询都会自动成为聚合查询。如果没有group by,则只返回一行。
  • 尽可能为外键提供与主键相同的名称。

答案 1 :(得分:0)

COUNT()是一个组函数,因此使用它会自动导致行的分组。这就是为什么在ORDER BY子句中使用结果时,结果中只有一行。

不幸的是,目前还不清楚你要做什么,所以我不能告诉你如何重写你的查询以获得你想要的结果。

答案 2 :(得分:0)

您可以尝试:

SELECT L.* , C.Cnt
FROM Event_list L
LEFT JOIN (
  SELECT E.EID, COUNT(*) AS Cnt
  FROM Event_List E 
  JOIN Interest I
  ON E.Interest = I.Interest_name 
  JOIN `User's Interests` U
  ON U.Interest_id  = I.Insert_Id
  Where U.P_id=Pid and U.is_canceled=0
  GROUP BY E.EID
) C
ON E.Eid = C.Eid
Order By Cnt DESC

我没有要测试的表,因此您可能需要更正列名和其他条件。只是提供你的想法。