Я не уверен, что мне не хватает чего-то действительно очевидного, но я получаю синтаксическую ошибку в этом запросе. Даже если я упускаю что-то очевидное, я хотел бы знать, есть ли более разумный способ получить то, чего я добиваюсь.
По сути, запрос запрашивает любые строки, связанные с пользователем с датой start_date с понедельника по пятницу. Это прекрасно работает. Но затем я добавил условный запрос на случай, если в эту субботу или воскресенье появятся какие-либо строки. Обратите внимание, что условный запрос проверяет ЛЮБЫЕ пользователи с субботой или воскресеньем, а не пользователя в основном запросе:
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
)