我有點卡住..MySQL的加入/ GROUP一個一對多的關係
我有兩個表
mysql > EXPLAIN event;
+-------------+--------------+------+-----+---------------------+-----------------------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------------------+-----------------------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(100) | NO | MUL | | |
| extUrl | varchar(192) | NO | | | |
+-------------+--------------+------+-----+---------------------+-----------------------------+
一個事件可以有許多
mysql> explain eventDate;
+----------------+--------------+------+-----+---------------------+-----------------------------+
| Field | Type | Null | Key | Default | Extra |
+----------------+--------------+------+-----+---------------------+-----------------------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| category_id | int(11) | NO | MUL | 0 | |
| event_id | int(11) | NO | MUL | 0 | |
| location_id | int(11) | NO | MUL | 0 | |
| name | varchar(100) | NO | | | |
| eventDate | timestamp | NO | | 0000-00-00 00:00:00 | |
+----------------+--------------+------+-----+---------------------+-----------------------------+
我會喜歡通過id
查詢事件,location_id
的下一個即將到來的eventDate
,我被卡住瞭如何形成查詢
我現在有這個
SELECT
e.id,
d.location_id,
d.eventDate
FROM
event e
INNER JOIN eventDate d ON d.event_id = e.id AND d.eventDate >= CURRENT_TIMESTAMP
WHERE
e.id = 5107
GROUP BY
e.id
ORDER BY
d.eventDate ASC
現在這個返回一個結果,但我GROUP BY事件,所以我不能確定如何保證真正的下一個EVENTDATE選擇。此外,我沒有使用任何聚合函數(逐個聚合,聚合很多),這似乎不是一個乾淨和明確定義的結果要求--MySQL隨機選擇其中一個eventDate行,現在不是它嗎?
會選擇任何的事件大於或等於當前時間戳。由於您是通過ID對其進行分組的,MySQL不知道哪一行對您更重要。因此,它會選擇它遇到的第一個或最後一個,而不是 - 因爲我相信你希望它 - 下一個upcomming eventDate。你將不得不擴展你的'WHERE'子句和/或給它添加一個'LIMIT'來只選擇1 – Tikkes
是的,我想有下一個即將到來的eventDate,由於' WHERE e.id = 5107'和'GROUP BY e.id',但我不確定'ORDER BY'子句提示MySQL選擇下一個即將出現的'd.eventDate'。有沒有更好的方法 –