このクエリが正しいかどうか疑問に思っています。n日前に投稿された人ごとのイベントごとに、最新のログエントリ(またはそのイベントにログを記録していない場合はNULL)の人(名前/電子メール)を選択しようとしています。テーブルの制約は次のとおりです。
- イベントには一意の ID がありますが、複数のログ エントリを持つことができます。
- イベントには複数のスタッフ メンバーが参加できます。
- スタッフ メンバーは、複数のイベントに割り当てることができます。
- スタッフ メンバーは、自分が参加しているイベントにのみログを記録します。
- スタッフがイベントに参加している場合、date_dropped_event フィールドには「0」が入ります。スタッフ メンバーがイベントを終了すると、これはゼロ以外のタイムスタンプに変更されます。スタッフ メンバーが後でイベントに再び参加すると、タイムスタンプが「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