php - 选择用户参与的所有即将发生的事件

标签 php mysql sql

我的 SQL 有问题,该 SQL 应该选择特定用户参与的所有即将发生的事件。这是我的表的示例

事件

  id  |      timestamp      |  name  | deleted
 200  | 2014-04-01 14:00:00 | test 1 |    0
 201  | 2013-06-30 20:50:00 | test 2 |    0
 205  | 2014-04-02 09:00:00 | test 3 |    1
 210  | 2014-04-03 08:55:34 | test 4 |    0

回应

  id  | user | event |      timestamp      | canceled
 1001 |  50  |  201  | 2013-06-01 10:15:39 |    0
 1002 |  23  |  205  | 2014-02-15 09:32:00 |    0
 1003 |  50  |  210  | 2014-02-15 10:00:00 |    0
 1004 |  50  |  210  | 2014-02-16 20:00:00 |    1
 1005 |  50  |  200  | 2014-02-16 20:05:40 |    0

解释一下结构:如果管理员删除了某个事件,则该事件的已删除值将设置为 1。如果用户注册了某个事件,则 responses 中会添加该用户的新行id、事件id、当前时间和cancels = 0。他也可以取消他的注册。在这种情况下,将在 responses 中添加一个新行,并取消 = 1。因此,每次用户对事件的注册状态发生更改时,都会添加一个新行。用户有可能注册了某个事件,然后取消了注册,然后再次注册了同一事件。

现在我想选择 id 为 50 的用户已注册(且尚未取消注册)的所有即将发生的事件。这应该是结果:

event.id |   event.timestamp   | responses.id
   200   | 2014-04-01 14:00:00 |     1005

目前我正在使用 SELECT 语句和 php 来获取上面显示的结果。 编辑 这就是我现在所做的: 首先我这样做

"SELECT id,timestamp FROM events WHERE timestamp>NOW() AND deleted=0"

然后我运行一个 php foreach 循环来为每个即将发生的事件执行此语句

"SELECT id,canceled FROM responses WHERE user = 50 AND event=$event->id ORDER BY timestamp DESC LIMIT 1"

如果一行存在,我用 php 检查取消是否为 0。

如何用单个 SELECT 语句解决问题?

最佳答案

您可以子选择MAX(canceled)以查看用户是否取消了注册。 类似于:

SELECT resp.user, events.id, events.name, events.timestamp AS event_time
FROM events
LEFT JOIN (SELECT user, event, MAX(canceled) canceled FROM responses GROUP BY user, event) resp
ON (events.id=resp.event)
WHERE events.timestamp>NOW() AND events.deleted=0 AND resp.canceled=0

关于php - 选择用户参与的所有即将发生的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22465653/

相关文章:

sql - CTE 与 Group By 返回与基本查询相同的结果

php - 找到没有 child 的行,如果有 child 最新的 child

php - 将日期转换为Mysql日期格式php

php - 创建自动登录用户的第二个登录页面

mysql - 如何从 UNION 查询中获取 "remove duplicates"

mysql - 从表A中选择所有记录并连接表B以获得A的属性

php - 如何为mysql创建DROP INDEX IF EXISTS?

javascript - 如何使用javascript中的post方法将输入类型文件发送到图像上传文件

php - 带有 join 子句和 group by 子句的 mysql 查询

c# - CRUD场景的NoSql更新机制