我想知道这个查询是否正确。我正在尝试为每个人在少于 n 天前发布的每个事件中选择最近的日志条目(如果该人从未记录该事件,则为 NULL)的人(姓名/电子邮件)。以下是表约束:
- 一个事件有一个唯一的 ID,但它可以有多个日志条目。
- 一个事件可以有多个工作人员。
- 可以将一名工作人员分配给多个事件。
- 工作人员只会记录他/她参与的事件。
- 如果工作人员是事件的一部分,则“0”将出现在 date_dropped_event 字段中。如果工作人员退出事件,这将更改为非零时间戳。如果工作人员稍后重新加入该事件,则将创建一个带有“0”时间戳的新行。
我正在使用以下查询:
SELECT
max(`log`.`date_added`) AS `logdate`,
`log`.`description`,
`eventppl`.`staff_id`,
`staff`.`name`,
`staff`.`email`,
`event`.`name`,
`event`.`deleted`
FROM `events` AS `event`
LEFT JOIN `logs` AS `log` ON `log`.`event_id` = `event`.`event_id`
LEFT JOIN `events_people` AS `eventppl` ON `event`.`event_id` = `eventppl`.`event_id`
LEFT JOIN `staff` AS `staff` ON `eventppl`.`staff_id` = `staff`.`staff_id`
WHERE
`event`.`deleted` = 0 AND
`eventppl`.`date_left_event` = 0 AND
DATE(FROM_UNIXTIME(`log`.`date_added`)) <= DATE_SUB(CURDATE(), INTERVAL 1 DAY)
GROUP BY `event`.`name`
我有以下表结构:
日志
log_id | main_event_id | description | date | staff_id
1 1 log entry timestamp 11199
2 1 log entry timestamp 11199
3 1 log entry timestamp 11127
4 2 log entry timestamp 11199
5 2 log entry timestamp 11199
事件
event_id | name | deleted
1 EVENT_name1 0
2 Event_name2 0
3 Event_name3 1
events_people (11199) 后来重新加入
event_id | staff_id | date_left_event
1 11199 234234234
1 11126 0
1 11125 0
1 11199 0
2 11199 0
3 11199 0
职员
staff_id | name | email
11125 john a@b.com
11126 jane a@bbasfd.com