我正在进行以下查询以从两个不同的表中获取消息和图像。 这里有一条消息可以有多个图像
为此我写了以下查询,该查询正常工作并显示以下结果
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
此处 messaged messageby adddate 正在重复并在jsp页面中显示 显示总共4条不同的信息。
但是我希望用相关的消息详细信息显示4个imageid和small_pic_path(基于消息ID)
我想显示为
1)消息
sentBy
这条消息的所有small_pic_path消息都是
1)消息
sentBy
这条消息的所有small_pic_path消息都是
2)消息
sentBy
这条消息的所有small_pic_path消息都是
3)消息
sentBy
这条消息的所有small_pic_path消息都是
答案 0 :(得分:1)
这是使用JOIN
时的预期行为,您获得了交叉产品。
如果要折叠行,请使用GROUP BY
和相应的列。在你的情况下,它可能是:
GROUP BY messageid, message, sentry, adddate
答案 1 :(得分: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处理。
祝你好运。