これはMysql/sqlクエリの質問ですが、コンテキストを説明できます。PHPカレンダーに「<PREV」および「NEXT>」ボタンを装備して、ユーザーが前または次の利用可能な月に簡単に移動できるようにします。利用可能なデータベースエントリがあります。使用可能なデータベースエントリがない場合は、ボタンを無効にします(システムに空のカレンダーを表示させたくありません)。
例: ユーザーはFEBを表示しています。JANとMARにはエントリが含まれていませんが、DECとAPRには含まれています。次に、[次へ>]ボタンを4月のカレンダーに切り替える必要があります。「<PREV」ボタンは12月のカレンダーに切り替える必要があります。
したがって、基本的には、表示されている月の前後(一部ではない)にエントリが存在するかどうかを確認できる単一の効率的なクエリを探しています。
テーブルには、日付'Ymd'タイプのフィールド'logDate'があります。
最初に、指定された日付の前後に日付が存在するかどうかを確認するために、次のクエリをいじり始めましたが、このクエリにはいくつかの問題があることを理解しています。1つは、「2013-03-19」のテーブルにエントリがある場合、クエリはprevに1を吐き出します。これは、もちろん、3月より前の月にエントリが存在するかどうかを示しません。
SELECT IF( EXISTS(SELECT dayId FROM LogbookDay
WHERE logDate < '2013-03-20' AND userId = 2), 1, 0) as prev,
IF( EXISTS(SELECT dayId FROM LogBookDay WHERE logDate > '2013-03-20'
AND userId = 2), 1, 0) as next