我正在構建基於mysql的聊天應用程序。只顯示mysql中的唯一條目
我的數據庫架構有如下表,
Users Messages
================= =================
id id
screen_name message
from
to
timestamp
的距離,並在信息表中的字段包含發送和接收的每封郵件的用戶ID的。
我想顯示用戶($ id)和他們的朋友之一($朋友)之間的所有消息。我的查詢如下:
$query = "SELECT messages.* , users.screen_name FROM users CROSS JOIN messages ";
$query .= "ON (messages.to = $id AND messages.from = $friend) ";
$query .= "OR (messages.to = $friend AND messages.from = $id)";
問題是每個消息在結果表中都是兩次。
我試過使用DISTINCT,但它不是在這種情況下工作,或者我用它錯了。
我的查詢應該爲了讓兩個用戶之間的每條消息只有一次?
'GROUP BY messages.id'? – jensgram 2012-04-10 13:29:51
似乎是在做的伎倆。你能否簡單地在答案中解釋一下,以便我可以授予代表? – ppp 2012-04-10 13:32:02
您正在選擇'messages。*'。使用'SELECT DISTINCT',如果這些字段中的任何一個不同(不管消息是否相同),那麼你將得到兩行。我建議你不要使用'SELECT *',而是明確地選擇你實際需要的每個單獨的字段。有關更多信息,請參見[本文](http://stackoverflow.com/questions/321299/what-is-the-reason-not-to-use-select)。 – Travesty3 2012-04-10 13:34:34