我不确定我是否遗漏了一些非常明显的东西,但我在这个查询中一直遇到语法错误。即使我错过了一些明显的东西,我也想知道是否有更聪明的方式来获得我所追求的东西。
基本上,查询要求在星期一和星期五之间绑定到具有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传递给它)。
很棒的工作,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
)
答案 0 :(得分:2)
试试这个子查询:
(SELECT
IF(COUNT(*) > 0, 6, 4)) - WEEKDAY(NOW()) DAY)
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)
我做过的两件事
答案 1 :(得分:1)
这在这里崩溃了:
(SELECT
IF(
COUNT(*) FROM shifts
WHERE DATE(shift_start) BETWEEN
count语句不起作用。
你想做什么?您需要明确说明您要在这里完成的任务。
这是我的唠叨:
(SELECT
IF(
(select 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))>0,6,4)
) - WEEKDAY(NOW()) DAY
但不知道你想做什么,我不确定。