我如何使用一个查询检查我的数据库中是否填写了所有日期,我有一个数组包含所有应该填写的日期和我的数据库。我正在考虑使用 IN
但无法让它工作,到目前为止我的查询看起来像这样
SELECT `User` . * , `Department`.`name`, if(Hour.date IN('2014-05-05', '2014-05-05', ...), 1, 0) AS all_days_filled
FROM `kadry`.`users` AS `User`
LEFT OUTER JOIN `kadry`.`departments` AS `Department` ON ( `Department`.`id` = `User`.`assigned` )
LEFT OUTER JOIN `kadry`.`hours` AS `Hour` ON ( `Hour`.`subordinate_id` = `User`.`id` )
WHERE `User`.`assigned`
IN (
'001004012', '116', '113', '114', '004001002'
)
AND `role` != 'superior'
AND `Department`.`active` = '1'
AND `User`.`active` = '1'
AND ((date( discharge ) > '2014-05-01')
OR (
discharge IS NULL
)
)
GROUP BY `User`.`id`
ORDER BY `Department`.`name` ASC , `User`.`l_name` ASC
最佳答案
您可以尝试使用 GROUP_CONCAT
函数。默认情况下,它将返回以逗号连接的日期。如果您需要不同的分隔符,您可以将其指定为一个选项。您还可以将 DISTINCT
和 ORDER BY
放在 GROUP_CONCAT
中。
查看 mysql 文档 http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat
SELECT `User` . * , `Department`.`name`,
CASE
WHEN GROUP_CONCAT(Hour.date ORDER BY HOUR.date) = '2014-05-01, 2014-05-02, ...' THEN 1
ELSE 0
END AS all_days_filled
FROM `kadry`.`users` AS `User`
LEFT OUTER JOIN `kadry`.`departments` AS `Department` ON ( `Department`.`id` = `User`.`assigned` )
LEFT OUTER JOIN `kadry`.`hours` AS `Hour` ON ( `Hour`.`subordinate_id` = `User`.`id` )
WHERE `User`.`assigned`
IN (
'001004012', '116', '113', '114', '004001002'
)
AND `role` != 'superior'
AND `Department`.`active` = '1'
AND `User`.`active` = '1'
AND ((date( discharge ) > '2014-05-01')
OR (
discharge IS NULL
)
)
GROUP BY `User`.`id`
ORDER BY `Department`.`name` ASC , `User`.`l_name` ASC
关于php - MySQL:如果所有值都存在则返回真,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24037428/