0

我有以下查询以从两个不同的表中获取消息和图像。这里一条消息可以有多个图像

为此,我编写了以下查询,该查询正常工作并显示以下结果

select msg.messageid, msg.message, msg.sentby, msg.adddate, 
p_i.image_id ,p_i.small_pic_path 
from user_messages as msg
LEFT JOIN post_images as p_i
on msg.messageid=p_i.messageid
where msg.messageid='zpx1btrpvpa1360154523078'
order by msg.adddate desc

输出是

 messageid  message  sentby  adddate  image_id  small_pic_path
   1         abc      aa      12/2/12   6          /sdf/sdf
   1         abc      aa      12/2/12   7          /asdf/df
   1         abc      aa      12/2/12   8          /cxd/sxc
   1         abc      aa      12/2/12   9          /zz/szz

这里adddate 发送的 messageid 消息 是重复的,并且在显示在 jsp 页面中时显示总共 4 条不同的消息。

但是我想显示 4 imageid 和 small_pic_path(基于消息 id)以及相关的消息详细信息

我想显示为

1) Message sentBy
all small_pic_path of messag id of this message

1) Message sentBy
all small_pic_path of messag id of this message

2) Message sentBy
all small_pic_path of messag id of this message

3) Message sentBy
all small_pic_path of messag id of this message

4

2 回答 2

1

在没有真正了解您的要求的情况下,您写道:

但我想用一条消息详细信息显示 4 个 imageid 和 small_pic_path

你想如何显示这些记录?

假设您的意思是在同一行,然后考虑使用GROUP_CONCAT

SELECT msg.messageid, msg.message, msg.sentby, msg.adddate, 
  group_concat(p_i.image_id separator ';') imageids,
  group_concat(p_i.small_pic_path separator ';') picpaths
FROM ...

这是一个演示结果 的SQL Fiddle 。

如果您想以不同的方式显示结果,您可能应该通过 UI 来处理。

祝你好运。

于 2013-02-07T02:02:06.720 回答
1

这是使用 a 时的预期行为JOIN,您会得到叉积。

如果要折叠行,请GROUP BY与适当的列一起使用。在您的情况下,它可能是:

GROUP BY messageid, message, sentry, adddate
于 2013-02-07T01:47:03.190 回答