【问题标题】:COUNT with condition and join带有条件的 COUNT 并加入
【发布时间】:2012-10-17 02:02:51
【问题描述】:

我有对话和消息。目标是选择对话框及其未读消息的计数。表消息有unread 字段来检测它。

我试过了

SELECT *, count(unread) as nums 
FROM dialogs JOIN messages ON dialogs.id=messages.dialog_id  
GROUP BY dialogs.id 
HAVING count(unread) <> 0

但总是得到消息的总数

【问题讨论】:

  • 可能 MySQL 或 * 不能仅用于按 dialogs.id 分组?
  • MySQL,忘记详细了。

标签: mysql sql join count conditional-statements


【解决方案1】:

如您所说,如果“未读”是未读消息的计数,则它始终有一个值,即使为零,并且始终包含在 COUNT(unread) 中。

尝试插入WHERE messages.unread != 0

【讨论】:

  • 也许是 SUM 而不是 COUNT?未读是真/假字段还是可以有任何数值?你能发布源数据的例子吗?
  • 你能和我们分享一下 ENUM 的定义吗?
  • 然后在 WHERE 子句中尝试使用 '0' 而不是 0 -- 大声笑,我们无法读懂你的想法
【解决方案2】:

如果您说表 messages 有一个列 unread,那么我不明白为什么要计算该列,您可能需要对这些值求和(假设可以有多个记录那张桌子上的dialog_id 相同)。所以,我会这样写你的查询:

SELECT *
FROM dialogs D
INNER JOIN (SELECT dialog_id, COUNT(*) AS nums
            FROM messages
            WHERE unread = 1
            GROUP BY dialog_id) M
ON D.id = M.dialog_id  
WHERE M.nums > 0

【讨论】:

  • @Meliborn 我不完全理解你的评论。
  • 抱歉,我得到了消息总数而不是未读消息。
  • @Meliborn 您是否正在运行与现在发布的完全相同的查询,我在几分钟前更新了它
  • 是的,我正在运行最后一个查询。
  • @Meliborn 我不明白你怎么能得到这些结果。可能我不太了解您的表格结构。你应该用这些信息更新你的问题,可能还有一些关于你拥有什么和想要什么的测试数据
【解决方案3】:

哦!!!按messages.id 计数。 试试这个:

SELECT *, count(messages.id) as nums FROM dialogs  
      JOIN messages ON dialogs.id=messages.dialog_id  
      WHERE messages.unread = 1 
      GROUP BY dialogs.id 
      HAVING nums <> 0

messages.unread 的 Enum 类型可能需要引用:

SELECT *, count(messages.id) as nums FROM dialogs  
      JOIN messages ON dialogs.id=messages.dialog_id  
      WHERE messages.unread = '1' 
      GROUP BY dialogs.id 
      HAVING nums <> 0

我不确定你为什么要创建一个 enum('0','1') ......

【讨论】:

  • 如果你取出对话表并加入它是否有效? SELECT *, count(unread) as nums FROM messages GROUP BY dialogs_id HAVING nums &lt;&gt; 0
  • 我应该按 dialog.id 分组,如果我将使用 group by message.id a all messages 而不是 dialogs
  • @Meliborn 我的错误,看到变化,我的意思是计算 messages.id。我假设未读的值为 1 或 0
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多