2012-07-01 78 views
0

我有兩個SQL表,一個有用戶,另一個有消息。 現在我的查詢是:SQL查詢只顯示特定用戶的最新消息?

SELECT users.memberid,users.username,users.profileimage,users.gender,message.messagebody, message.fromid,message.toid,message.messageid 
FROM message,users 
WHERE message.fromid = users.memberid AND message.toid = '$id' AND recieverdeleted='0' 
ORDER BY datetime DESC LIMIT 55 

現在正在返回的是所有everymessage無論formid(發送者ID)的信息 的事情是,我想只顯示最近的每一個從消息id ..類似Facebook如何向您顯示朋友x向您發送的最新消息,而不是所有消息。在用戶點擊他朋友的最近消息後,我會努力顯示所有消息。 謝謝

+3

幾乎每天都會問到幾乎完全相同的問題。詢問之前請先搜索! –

+0

[選擇的MySQL文檔](http://dev.mysql.com/doc/refman/5.5/en/select.html) – Jocelyn

+0

嗨,我看到我的問題有很多版本被問到,但無法應用到我的自己的查詢。儘管感謝您的鏈接! –

回答

0

最初join這兩個表比應用order by,因爲在這一刻命令不確定你想應用哪個表的順序。 或者更好的是從兩個表格的選擇中創建一箇中間表格,然後應用排序。 喜歡的東西:

SELECT username,messagebody,fromid FROM(
SELECT users.memberid,users.username,users.profileimage,users.gender,message.messagebody, message.fromid,message.toid,message.messageid,message.datetime 
FROM message,users 
WHERE message.fromid = users.memberid AND message.toid = '$id' AND recieverdeleted='0')INTERMEDIATE_TABLE ORDER BY datetime DESC 

因爲我有一個很久以前完成的SQL代碼,但你應該嘗試非常類似這樣的東西,我可能是錯的語法。

+0

對不起,這是order by message.datetime ...按消息表排序.. –

-1

試試這個::

SELECT users.memberid,users.username,users.profileimage,users.gender,message.messagebody, message.fromid,message.toid,message.messageid 

FROM message inner join users on (message.fromid = users.memberid) 
where message.toid = '$id' AND recieverdeleted='0' 
ORDER BY message_datetime DESC limit 1 
+0

謝謝,但此查詢仍然返回各個用戶的所有消息。 –

+0

你到底需要什麼? 查詢將返回where子句中用戶的最新消息,是否需要所有用戶的列表以及他們的消息? –

+0

基本上,如果有幾條消息都使用相同的fromid和toid,則上面的查詢將返回所有這些消息(就像我的查詢一樣)。如果有多條來自ID和來自ID的消息,我只想將最近的消息發送給來自fromid的toid。 –

0

試試這個其工作

SELECT m1.* 
    FROM table_name m1 
    INNER JOIN (SELECT MAX(senddate) AS senddate, 
        IF(member_id2 = 3, member_id1, member_id2) AS user 
       FROM table_name 
       WHERE (member_id1 = 3 AND delete1=0) OR 
        (member_id2 = 3 AND delete2=0) 
       GROUP BY user) m2 
     ON m1.senddate = m2.senddate AND 
      (m1.member_id1 = m2.user OR m1.member_id2 = m2.user) 
    WHERE (member_id1 = 3 AND delete1=0) OR 
      (member_id2 = 3 AND delete2=0) 
    ORDER BY m1.senddate DESC 
+0

這是迴應不同的問題嗎? – Strawberry

0

嗯,你嘗試過。那很好。

SELECT u.memberid 
     , u.username 
     , u.profileimage 
     , u.gender 
     , m.messagebody 
     , m.fromid 
     , m.toid 
     , m.messageid 
    FROM users u 
    JOIN message m 
    ON m.fromid = u.memberid 
    JOIN (SELECT fromid,toid,MAX(datetime) max_datetime FROM message GROUP BY fromid,toid) n 
    ON n.fromid = m.fromid 
    AND n.toid = m.toid 
    AND n.max_datetime = m.datetime 
    WHERE message.toid = $id 
    AND recieverdeleted = 0 
    ORDER 
    BY datetime DESC LIMIT 55;