我有 2 个 MySQL 表:
包含所有事件的表
+----+---------------------+
| id | Eventtitle |
+----+---------------------+
| 1 | Event 1 |
| 2 | Event 2 |
| 3 | Event 3 |
| 4 | Event 4 |
+----+---------------------+
包含用户出席状态的表 - 用户可以多次更改其状态。每次更改时,都会在表中插入一个新条目
+----+------------+----------+---------+---------------------+
| id | event_id | user_id | status | attend_time |
+----+------------+----------+---------+---------------------+
| 1 | 1 | 2 | 1 |2013-07-03 15:34:02 |
| 2 | 1 | 2 | 2 |2013-08-03 19:01:02 | <--
| 3 | 3 | 1 | 1 |2013-07-03 15:34:02 |
| 4 | 4 | 4 | 3 |2013-07-03 15:34:02 |
| 5 | 4 | 6 | 2 |2013-07-03 15:34:02 |
| 6 | 4 | 6 | 1 |2013-07-03 18:55:02 | <--
+----+-----------------------+---------+---------------------+
现在我想要列出所有事件,以及当前登录用户的最近出席状态和出席时间(例如 user_id 2 或 54) - 如果他是不在参加表中,我仍然需要该事件的条目。 (在这种情况下,state
和 attend_time
的 NULL 会很好)
这里我重建了数据结构:http://sqlfiddle.com/#!2/c1b3f
如果无法使用 MySQL 获取结果 - 我将尝试使用 PHP 获取结果
最佳答案
尝试这样的事情:
SELECT s.id, eventtitle, status, attend_time
FROM events e
JOIN status s ON e.id = s.event_id
WHERE user_id = 2 AND attend_time = (SELECT MAX(attend_time) FROM status
WHERE user_id = 2)
<强> SQLFiddle
或者:
SELECT s.id, eventtitle, s.status, s.attend_time
FROM events e
JOIN status s ON e.id = s.event_id
LEFT JOIN status s2 ON s.attend_time < s2.attend_time
WHERE s.user_id = 2 AND s2.attend_time IS NULL
<强> SQLFiddle
关于php - 从另一个具有最新条目的表中选择值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23958876/