0

我正在尝试显示图像、用户名和重要的与查询一起出现的回复。我使用了类似下面的代码,但对于回复列,即使信息已满,我也会不断得到空值或空值。它有 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

更新。上面的代码有效。

4

1 回答 1

0

从其他人的评论中,您还有一个 GROUP BY,用于进行聚合(例如 MIN()、MAX()、AVG() 等),例如每个销售代表的总销售额、每月、每年等. 通过按图像 ID 分组,您将丢失一个人可能有多个回复的实例。

无论如何,对您的查询进行一些清理。目前尚不清楚标题表如何链接到回复,并且您有一个 LEFT-JOIN 来回复,但随后寻找图像的 IS NOT NULL。这将表明 INNER 连接与 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 的测试只需要真正在任何一个键列上......如果它为空,则整个记录都丢失并且也将为空。(即:它在回复“ID”或“MID”列的任何一个上都找不到匹配项。

如果您提供表结构以更好地显示表之间的关系,则上述查询显然会略有改变。您可能打算使用 ORDER BY 而不是 GROUP BY 子句。

于 2013-10-15T19:48:51.633 回答