このクエリを使用して、mysql イベント テーブルの次のイベントと前のイベントの ID を取得します。
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']
asでクエリを実行すると、次の2012-01-02
ように返されます。
Array
(
[0] => Array
(
[current] => 2
[previous] => 1
[next] => 3
)
)
$result['date']
ただし、 as 2012-01-01
ORでクエリを実行すると2012-01-03
、空の結果セットが返されます!
渡された日付が最高または最低であるために前または次の日付が存在しない場合でも、次または前の日付を返すには結果セットが必要です
例えば
したがって、$result['date']
as2012-01-01
でクエリを実行すると、結果セットが必要になります。
Array
(
[0] => Array
(
[current] => 1
[next] => 2
)
)
OR
Array
(
[0] => Array
(
[current] => 1
[previous] => NULL
[next] => 2
)
)