我使用此查詢在MySQL事件表,以獲取下一步和上一步活動的ID:如何防止MySQL的交叉聯接查詢返回結果爲零,如果查詢之一返回null
SELECT e.id AS current, prev.id AS previous, next.id AS next
FROM events e
CROSS JOIN
(
SELECT id FROM events
WHERE date < '{$result['date']}'
ORDER BY date DESC
LIMIT 1
) prev
CROSS JOIN
(
SELECT id
FROM events
WHERE date > '{$result['date']}'
ORDER BY date
LIMIT 1
) next
WHERE e.date = '{$result['date']}'
這個查詢作品精細。
讓假裝表看起來像這樣:
ID | EVENT_NAME | DATE
------------------------------
1 | test event 1 | 2012-01-01
2 | test event 2 | 2012-01-02
3 | test event 3 | 2012-02-03
如果我運行$result['date']
爲2012-01-02
查詢,這將返回:
Array
(
[0] => Array
(
[current] => 2
[previous] => 1
[next] => 3
)
)
但是如果我$result['date']
爲2012-01-01
運行查詢OR 2012-01-03
,返回空結果集!
如果前一個或下一個日期不存在,因爲傳遞的日期是最高或最低,我還需要將結果集返回下一首或上
E.G.
因此如果我用$result['date']
爲2012-01-01
運行查詢,我需要的結果集:
Array
(
[0] => Array
(
[current] => 1
[next] => 2
)
)
OR
Array
(
[0] => Array
(
[current] => 1
[previous] => NULL
[next] => 2
)
)
這不會害怕,說是'WHERE'附近的語法錯誤,我將它改爲'ON',仍然不工作:( – 2012-07-13 11:47:43
什麼是語法錯誤? – 2012-07-13 11:53:28
@ AlexMorley-Finch表別名在ON子句之前。 – 2012-07-13 11:54:13