好的,我正在尝试用PHP构建一个用户拥有的所有消息的对话列表。 我的数据库设置有4个字段,发件人ID,接收者ID,时间戳和消息。我的查询返回接收者ID等于当前用户ID的每个结果。我只想选择每个发件人ID的第一次出现。即:
==================================================
| 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过滤数组中的结果,但我只是在脑中放屁。有什么想法吗?
答案 0 :(得分:0)
您可以通过按时间排序然后限制为1
来使用SQL像
这样的东西Select ....
ORDER BY Time DESC
LIMIT 1
答案 1 :(得分: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
在此处查看