對於不恰當的措辭標題,我表示歉意。想不到更好的一個。如何連接兩個大不相同的mysql表,並且一次排列兩列?
我有一個應用程序發送和接收消息。我有兩個表,一個用於發送一個用於接收:
發送:
id
status
sent_date
user_id
sent_message
sent_from
sent_to
another_field1
another_field2
comments
收稿日期:
id
received_date
user_id
received_message
received_from
received_to
another_field3
another_field4
comments
我試圖顯示基於會話主題這兩張表。我需要通過user_id加入兩個,WHERE received.received_from = sent.sent_to和received.received_to = sent.sent_from AND sent.status = 1 [表示它已發送],然後在兩個日期列中對它們進行排序 - 所以消息按對話順序顯示。
我看到了其他類似的問題,使用工會來做到這一點,但我不確定這是否適用於我的情況由於列不同。我的顯示屏,在PHP中完成的,將是這樣的:
談話{} sent_to,按日期排序:
{sent_date} From me: {sent_message}
{received_date} From {received_from}: {received_message}
{received_date} From {received_from}: {received_message}
{sent_date} From me: {sent_message}
另外,我意識到,我可能已經低效結構化數據庫。我願意就如何更好地優化結構以及如何運作提出建議。謝謝。
編輯:我只是試着做阿蘭柯林斯的建議,但我很難搞清楚如何從收到的字段中分離發送的字段。我真的想把這兩張桌子放在一起,但是沒有結合實際的領域。這是我到目前爲止,這是完全錯誤的:
SELECT *,
case when sent.sent_date is not null then sent.sent_date
else received.received_date end AS date
FROM sent JOIN received ON (received.user_id = sent.user_id)
WHERE sent.user_id = ".$_SESSION['id']." ORDER BY date ASC
這是加入收到和發送的消息到一行。我仍然需要他們分開。有關如何做到這一點的任何提示?在單個表中同時發送和接收消息可能會更容易一些嗎?編輯2:爲了澄清,我希望兩個表中的列分開。也就是說,返回的ROWS應該只有發送的列或接收到的列,但行應按日期順序返回,如上所述。所以,我會得到行是這樣的:
Row 1: Array(Date, Sent_Message, Sent_From)
Row 2: Array(Date, Received_Message, Received_From)
Row 3: Array(Date, Received_Message, Received_From)
Row 4: Array(Date, Sent_Message, Sent_From)
所以只有兩個共同點與兩個表1),具有通話和2)日期user_ID的。日期必須以某種方式合併,因爲它們當前是「sent_date」和「received_date」。
既然你提到加入,我想你是加入。好吧。很高興你能解決問題。 –