php - 从另一个具有最新条目的表中选择值

标签 php mysql

我有 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) - 如果他是不在参加表中,我仍然需要该事件的条目。 (在这种情况下,stateattend_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/

相关文章:

mysql - 优化具有连接的 MySQL 查询

sql - 按多列分组并添加它们

python - Pandas SQLalchemy : complex filter on database columns

php - 如果来自数据库的散列密码与输入密码匹配,则登录

php - 无法从 PHP 中的大文件的 Img2Json API 获取 JSON 数据

PHP 以简单的方式创建 slugify(干净的 URL)链接? iconv 故障?

php - 如何使用 mysql 从多个类别中选择行并显示每个类别的数据列表?

php - 替代 mysql_real_escape_string (access_denied)

MySQL 选择组合唯一

php - 停止从 CSV 插入第一行