我最近開始致力於像聊天信使一樣的Facebook。我試圖將其組織到我可以向每個用戶展示他們最近的聯繫人的位置。爲了做到這一點,我需要以某種方式設置我的桌子。以下是我現在查詢的方式:合併行然後將它們分組?
$query = "SELECT uid1, uid2, message, timestamp FROM messages WHERE (uid1 = '$user[id]' OR uid2 = '$user[id]') ORDER by timestamp DESC LIMIT 10";
這是我的聊天客戶端的設置方式。可以說我們有UserB和UserC。如果UserB向UserC發送消息,則UserB將是uid1,而UserC將是uid2。如果UserC向UserB發送消息,UserC將是uid1,UserB將是uid2。
這樣,顯然任何人是uid1是發送消息的人,而uid2是接收它的人。但是,在我的情況下,我試圖顯示最近聯繫的用戶。通過這樣做,我需要抓住最近聯繫過的用戶。我需要同時獲取UID1和UID2結果,其中用戶名稱位於此處,並且我需要將其結果顯示在不顯示用戶重複行的位置。這樣,當顯示最近的聯繫人時,它不會向我顯示同一個用戶5次,因爲我們有5條消息來回傳遞。這樣它只會顯示一次,並會顯示我最近聯繫過的其他用戶(限制爲10)。
我開始尋找一種方法來做到這一點,但似乎很困難。我需要使用「GROUP BY」或「DISTINCT」鍵來確保結果不顯示重複的行。但是,這很難,因爲UID1和UID2可以交換。所以我想,也許我可以通過UID1和UID2進行分組。這是我的查詢:
$query = "SELECT uid1, uid2, message, timestamp FROM messages WHERE (uid1 = '$user[id]' OR uid2 = '$user[id]') GROUP BY uid1, uid2 ORDER by timestamp DESC LIMIT 10";
我不知道爲什麼,但這並不顯示我最近聯繫。所以它發生在我身上,也許我需要以某種方式結合UID1和UID2結果,然後添加DISTINCT或GROUP BY。有誰知道如何使這項工作?