本当に明らかな何かが欠けているかどうかはわかりませんが、このクエリで構文エラーが発生し続けます。明らかな何かが欠けている場合でも、求めているものを取得するためのよりスマートな方法があるかどうかを知りたい.
基本的に、このクエリは、月曜日から金曜日までの start_date を持つユーザーに関連付けられたすべての行を要求します。それはうまくいきます。しかし、その土曜日または日曜日に行がある場合に備えて、条件付きクエリを追加しました。条件付きクエリは、メイン クエリのユーザーではなく、土曜日または日曜日の ANY ユーザーをチェックしていることに注意してください。
SELECT user_id,
DATE_FORMAT(DATE(shift_start),'%m/%d/%Y') date,
TIME_FORMAT(TIME(shift_start), '%h:%i %p') start,
TIME_FORMAT(TIME(shift_end), '%h:%i %p') end,
title
FROM shifts
WHERE user_id = '$user_id'
AND DATE(shift_start) BETWEEN
DATE_SUB(DATE(NOW()), INTERVAL WEEKDAY(NOW()) DAY) AND
DATE_ADD(DATE(NOW()), INTERVAL
(SELECT
IF(
COUNT(*) FROM shifts
WHERE DATE(shift_start) BETWEEN
DATE_ADD(DATE(NOW()), INTERVAL 5 - WEEKDAY(NOW()) DAY) AND
DATE_ADD(DATE(NOW()), INTERVAL 6 - WEEKDAY(NOW()) DAY),
6, 4)) - WEEKDAY(NOW()) DAY)
ORDER BY shift_start
IF の部分を台無しにする前に、それがどのように機能するかを実際にかなり誇りに思っていますが、これを行う明らかにより良い方法があれば、私はすべて耳にします。
ああ、これが解決されると、「Now()」はphpスクリプトで設定された日付変数に置き換えられます(GET経由で渡されます)。
素晴らしい仕事、ベンルーミー。うまくいったのは次のとおりです。
SELECT user_id,
DATE_FORMAT(DATE(shift_start),'%m/%d/%Y') AS shift_start_date,
TIME_FORMAT(TIME(shift_start), '%h:%i %p') AS shift_start_time,
TIME_FORMAT(TIME(shift_end), '%h:%i %p') AS shift_end_time,
title
FROM shifts
WHERE user_id = '$user_id' AND
DATE(shift_start) BETWEEN
DATE_SUB(DATE(NOW()), INTERVAL WEEKDAY(NOW()) DAY)
AND
DATE_ADD
(
DATE(NOW()), INTERVAL
(
SELECT IF(COUNT(*),6,4)
FROM shifts
WHERE DATE(shift_start) BETWEEN
DATE_ADD(DATE(NOW()), INTERVAL 5 - WEEKDAY(NOW()) DAY)
AND
DATE_ADD(DATE(NOW()), INTERVAL 6 - WEEKDAY(NOW()) DAY)
) - WEEKDAY(NOW()) DAY
)