0

好的,我正在尝试在 PHP 中构建用户拥有的所有消息的对话列表。我的数据库设置有 4 个字段,发送者 ID、接收者 ID、时间戳和消息。我的查询返回接收者 ID 等于当前用户 ID 的每个结果。我只想选择每个发件人 ID 的第一次出现。IE:

==================================================
| Sender ID | Receiver ID |    Time    | Message |
==================================================
|     2     |      1      | 1373914164 |   test  | <--- this one
|     2     |      1      | 1373914155 | ..test  |
|     1     |      1      | 1373914134 |...test  | <--- this one
|     2     |      1      | 1373914111 |   test. |
|     1     |      1      | 1373914108 |   test..|
|     3     |      1      | 1373914102 |   test  | <--- this one
|     3     |      1      | 1373914101 |   test  |
==================================================

我的想法是使用 PHP 过滤数组中的结果,但我只是在这里完全放屁。有任何想法吗?

4

2 回答 2

0

你可以做这样的事情

SELECT *     -- Or what ever Columns
FROM aTab    -- Your table name
WHERE time IN (
   SELECT MAX(time) 
   FROM aTab
   WHERE R_id = 1 -- would help create better consistency
   GROUP BY S_ID)
AND R_id = 1

但是,如果接收者碰巧(我认为不太可能)同时收到消息,这可能会导致奇怪的结果

你可以用这个SQLFiddle在这里看到它

于 2013-07-15T20:13:25.290 回答
0

您可以通过按时间排序然后限制为 1 来使用 SQL

就像是

Select ....
ORDER BY Time DESC
LIMIT 1
于 2013-07-15T19:23:03.707 回答