0

我有这个 sql 查询:

$result = mysql_query("SELECT * FROM chat WHERE `to_id` = '$user_id' AND `from_id`   IN($data)") or die(mysql_error());
    while ($row = mysql_fetch_assoc($result)) {
    print_r($row);
}

返回这个数组:

Array ( [id] => 3505 [from_id] => 111 [to_id] => 109 [message] =>How are you? [sent] =>          1343109753 [recd] => 1 [system_message] => no )    
Array ( [id] => 3506 [from_id] => 111 [to_id]   => 109 [message] =>well... [sent] =>   1343109759 [recd] => 1 [system_message] => no ) 
Array ( [id] => 3507 [from_id] => 141 [to_id] => 109 [message] => bye [sent] => 1343901524 [recd] => 1 [system_message] => no )

From_id 是发送消息的人的用户 ID,但我只想为每个“from_id”获得一个(最近的)结果。(在这个例子中,我收到了来自同一个“from_id”的 2 条消息 - 111)

4

4 回答 4

3

也许GROUP BY

SELECT * FROM chat WHERE `to_id` = '$user_id' AND `from_id` IN($data) GROUP BY  `from_id` ORDER BY `sent` DESC 
于 2012-09-27T08:42:14.180 回答
1

SELECT * FROM chat WHERE to_id = '$user_id' ANDfrom_idIN($data) GROUP BY from_id order by sent desc

于 2012-09-27T08:41:53.237 回答
0

试试这样的,

SELECT a.*
FROM chat a INNER JOIN
        (
           SELECT   from_id, to_id ,MAX(sent) maxSent
           FROM     chat
           GROUP BY from_id, to_id
        ) b ON a.from_id = b.from_id AND
                a.to_id = b.to_id AND
                a.sent = b.maxSent
WHERE `to_id` = '$user_id' AND 
        `from_id` IN ($data)
于 2012-09-27T08:45:13.957 回答
0

SELECT * FROM chat WHERE to_id = '$user_id' AND from_id IN($data) order by sent desc limit 0,1

Order by 将订购最近的消息,LIMIT 0,1 将只返回一条消息。

于 2012-09-27T09:40:41.990 回答