2013-02-07 56 views
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 

輸出是sentby ADDDATE

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 

這裏的MessageID消息正在重複,同時顯示在jsp頁面中顯示總共4個不同的消息。

但是我想顯示與培訓相關的消息細節

我要顯示爲

1)消息4圖像標識和small_pic_path(基於消息ID) sentBy
所有small_pic_path的messag ID的此消息

1)消息 sentBy
該消息的messag ID的所有small_pic_path

2)消息 sentBy
所有small_pic_path此消息

3)消息 的messag ID sentBy
所有small_pic_path此消息

+1

你想要你的結果看起來如何? – sgeddes

+0

@sgeddes編輯該問題請參閱 – xrcwrn

回答

1

沒有真正理解你的要求,你寫:

但我想說明4圖像標識,並用一個單一的消息 詳細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以證明結果。

如果您想要以不同的方式顯示結果,那麼您可能需要通過用戶界面來處理。

祝你好運。

1

這是使用一個JOIN當預期行爲messag ID的,你會得到交叉產品。

如果要將行摺疊起來,請使用GROUP BY和相應的列。你的情況可能是:

GROUP BY messageid, message, sentry, adddate 
+0

正確。通常,數據庫查詢的輸出將在顯示給用戶之前進行格式化,因此您可以通過循環訪問數據集來構建任何您想要的格式。 – nextgentech

+0

@tadman你有一個錯字'add date'應該是'adddate'。 –

+0

具有諷刺意味的是,這是由瀏覽器的輸入錯誤修正功能引起的。謝謝你的提示。 – tadman