0

我已经构建了以下查询:

(选择
    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

此查询从表中选择所有 Privatemsgs,并像邮件一样执行,例如:

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

对标记为“相关”主味精 id 的私人味精的评论。

查询有效,但在显示中复制了 msg(多次显示相同的 msg)我尝试执行“GROUP BY id”以修复它,但出现错误:

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

谢谢你!!

4

1 回答 1

0

首先,根据 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)
于 2013-03-17T03:11:16.453 回答