【问题标题】:SQL query privatemsgs between users GROUP BY ERRORSQL查询用户之间的privatemsgs GROUP BY ERROR
【发布时间】:2013-03-05 14:34:27
【问题描述】:

我构建了以下查询:

(选择 privatemsgs.id, privatemsgs.useradn, privatemsgs.useraid, privatemsgs.title, privatemsgs.created, privatemsgs.timee, privatemsgs.isread, u.photo AS creatorphoto, privatemsgs.relatedto 来自私人信息 左连接 用户 AS u ON(privatemsgs.useraid = u.id) WHERE userbid='5' AND relatedto=0 和 bdel=1) 联合所有 (选择 privatemsgs.id, privatemsgs.useradn, privatemsgs.useraid, privatemsgs.title, privatemsgs.created, privatemsgs.timee, privatemsgs.isread, u.photo AS creatorphoto, rel.relatedto FROM privatemsgs AS rel 加入 privatemsgs ON(rel.relatedto = privatemsgs.id) 左连接 用户 AS u ON(rel.useraid = u.id) WHERE rel.userbid='5') 按 ID 分组 ORDER BY timee DESC

此查询从表中选择所有 Privatemsg,并像邮件一样,FOR EX:

如果我向用户 b 发送了一条消息,并且用户 b 回复了我。我想在每个用户的收件箱和发件箱中显示消息。

对标记为“相关”主消息 ID 的私有消息的评论。

查询有效,但显示中的消息重复(多次显示相同的消息) 我试图做“GROUP BY id”来修复它,但我得到了错误:

#1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在“GROUP BY id ORDER BY timee DESC”附近使用正确的语法

谢谢!!

【问题讨论】:

  • 在错误消息中显示GROUP BY relatedto ORDER BY timee DESC - 不应该是ORDER BY time DESC吗?
  • GROUP BY relatedto 甚至不在您显示的查询中。
  • 我不能输入任何 GROUP BY 语句(不是 id 和不相关的)我已经编辑了问题
  • 要使用GROUP BY(假设您需要它),您可能需要将UNION 包装到任何外部查询中并在那里使用GROUP BY
  • 另外,您是否尝试过UNION 而不是您的UNION ALL

标签: php mysql sql database


【解决方案1】:

首先,根据 PM 77 的评论,联合而不是联合都将解决您的重复问题。您根本不需要 group by 子句。

其次,你可能有一个逻辑错误。你的联合查询的顶部有这个:

FROM privatemsgs 
LEFT JOIN
users AS u ON(privatemsgs.useraid = u.id)
WHERE userbid='5'
AND relatedto=0 and bdel=1)

如果 where 子句中的任何字段在 users 表中,则您的左连接已成为内连接。要将其保留为左连接,您必须将所有过滤器放入连接中,如下所示:

FROM privatemsgs 
LEFT JOIN
users AS u ON privatemsgs.useraid = u.id
AND userbid='5'
AND relatedto=0 and bdel=1)

【讨论】:

    猜你喜欢
    • 2011-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-21
    • 2022-01-03
    • 2021-11-17
    • 2014-12-17
    • 1970-01-01
    相关资源
    最近更新 更多