(已缩小以下架构以减少问题)
我有两个表 Products
:
| ID | ProductName | AvailableDate (date)
|------------------------------------------------
| 1 | Foo | 2011-01-01
| 2 | Bar | 2017-01-01
| 3 | FooBar | 2011-01-01
和映射
:
| ID | ProductID | SomeOtherID
|------------------------------------------------
| 1 | 1 | 1
| 2 | 2 | 1
| 3 | 3 | 2
一个映射可以指向n
产品:
SELECT
GROUP_CONCAT(`Products`.ProductName SEPARATOR ', ')
FROM
Mappings
JOIN
Products ON Mappings.ProductID = Products.ID
GROUP BY
Mappings.SomeOtherID
我现在想扩展查询以检查 Products
中的任何行是否具有大于当前日期的可用日期 以发现组合的产品,即拥有至少一种“抢先体验”产品。
我尝试了以下方法
SELECT
GROUP_CONCAT(`Products`.ProductName SEPARATOR ', '),
IF(COUNT(DATEDIFF(`Products`.AvailableDate, CURDATE)) > 0, 1, 0) As IsEarlyAccess
FROM
Mappings
JOIN
Products ON Mappings.ProductID = Products.ID
GROUP BY
Mappings.SomeOtherID
但我总是收到 IsEarlyAccess = 1
。有什么提示吗?
最佳答案
我很想在 MAX 上使用 IF 而不是计算 IF:-
SELECT GROUP_CONCAT(Products.ProductName SEPARATOR ', '), IF(MAX(Products.AvailableDate) > CURDATE(), 1, 0) As IsEarlyAccess
FROM Mappings
JOIN Products ON Mappings.ProductID = Products.ID
GROUP BY Mappings.SomeOtherID
关于MySQL检查是否有任何行有 future 的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37697777/