我正在尝试显示图片,用户名以及与查询一起回复的回复。我使用了类似下面的代码,但对于回复列,即使信息已满,我仍然会得到空或空。它有3个表格,用于标题,图像和回复。标题包括用户的用户框和其他信息,图像和回复人的回复。
reply.mid假设匹配images.mid,以便回复可以在图像旁边。
SELECT images.id, images.who, header.username, images.message, images.name, reply.reply
FROM header, images
LEFT JOIN reply ON reply.reply = reply.mid
OR reply.mid = images.mid
WHERE images.name IS NOT NULL = header.id
AND images.who IS NOT NULL
AND images.message IS NOT NULL
GROUP BY images.mid
下面的故事结构。对不起
TABLE Header
username
id
who
where
Table images
message
name
mid - id that auto increments when image is loaded
id
content
Table reply
mid id that is taken from images mid to relate image to reply.
reply
id ----this is only for an id for a reply that is auto increment
更新。上面的代码有效。
答案 0 :(得分:0)
根据其他人的评论,您还有一个GROUP BY,用于进行聚合(例如MIN(),MAX(),AVG()等),例如每个销售代表的总销售额,每月,每个通过分组按图像ID,您可能会丢失一个人可能有多个回复的实例。
无论如何,对你的查询进行一点清理。目前还不清楚标题表如何链接到回复,你有一个LEFT-JOIN回复,但后来寻找图像的IS NOT NULL。这表示INNER加入vs LEFT加入。我正在转移查询,因为你正在寻找回复和那些为图像而来的人,所以就这样吧。
SELECT
H.username,
I.id,
I.who,
I.message,
I.name,
R.reply
FROM
replies R
join header H
on R.SomeKeyToLinkToHeader = H.SomeHeaderKeyLinkingToReplies
LEFT join images I
on R.ID = I.MID
OR R.MID = I.MID
WHERE
I.MID IS NOT NULL
IS NOT NULL的测试只需要真正在任何一个键列上...如果它为null,那么整个记录都会丢失并且也将为null。 (即:它无法找到回复“ID”或“MID”列的匹配。
如果您提供了表结构以更好地显示表之间的关系,则上述查询显然会略有改变。您可能打算使用ORDER BY而不是GROUP BY子句。