本当に明白なものがないかどうかわかりませんが、このクエリで構文エラーが発生しています。私が何か明白なものを見逃していても、私が何をしているかを知るためのよりスマートな方法があるかどうかを知りたいです。where節内のMySQL条件付きクエリ
基本的に、クエリは月曜日から金曜日までのstart_dateを持つユーザーに結び付けられた行を要求します。それは素晴らしい作品です。しかし、土曜日または日曜日の行がある場合に条件付きクエリを追加しました。条件付きクエリが土曜日または日曜日、メインクエリではないユーザーを持つユーザーのためにチェックされることに注意してください:私は実際にそれがIF部を台無しにする前に、それがどのように動作するかのかなり誇りに思っています
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
、しかし、これを行う明らかに良い方法があれば、私はすべての耳です。
ああ、これはアイロンが切れたとき、 "Now()"はPHPスクリプト(GETを介して渡された)に設定された日付変数に置き換えられます。
素晴らしい仕事、benlumey。ここで働いていたものです:
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
)
クエリを数回読んだ後で、MySQLがあなたのために行うことができる不必要な日付の計算を少し行っているように思われることがありますが、それはおそらく私の理解の欠如です。 「DATE(shift_start)BOOTHWAY DATE_SUB(DATE(NOW())、INTERVAL WEEKDAY(NOW())DAY)AND ...」から「WEEKDAY(shift_start)BETWEEN 1 AND AND ...」まで簡略化できますか? – ruquay
私はWEEKDAY(shift_start)を0と4の間で使っているだけで、月曜日と金曜日の間にあるすべてのシフトを返すことはありません(ほとんどすべてです)。たぶん私はあなたのアドバイスで何かを見逃しています。私はフィードバックを感謝します。それはかなり毛深く、MySQLが私の長いバージョンなしでできることのようです。 – Anthony