gpt4 book ai didi

php - MySQL - 根据值选择列

转载 作者:行者123 更新时间:2023-11-29 06:53:44 25 4
gpt4 key购买 nike

我的数据库中有一个事件表,每个事件都可以最多有 5 个不同的日期。表中的 date1 总是在 date2 之前,date2 在 date3 之前等等。

给定搜索表单中的 2 个日期,我试图找到它们之间的事件。

我的表格设计如下:

id | name  | date1     | date2      | date3     | date4     | date5
1 | test1 | 2013-05-24| 2013-05-25 | 0000-00-00| 0000-00-00| 0000-00-00
2 | test2 | 2013-06-01| 2013-06-08 | 2013-06-15| 2013-06-23| 2013-06-30
3 | test3 | 2013-03-15| 0000-00-00 | 0000-00-00| 0000-00-00| 0000-00-00

$datefrom 和 $dateto 是来自搜索表单的两个变量。例如,现在 $datefrom 将始终在表的 date1 中搜索。但是$dateto要在date5中查找,如果为null则到date4等等。

到目前为止我想到的最好的查询是:

SELECT * FROM events 
WHERE
IF(date1 != '0000-00-00', IF(date1>='2012-12-19', 1, 0),0) = 1
AND CASE
WHEN date5!='0000-00-00' THEN IF(date5<='2012-12-31', 1, 0)
WHEN date4!='0000-00-00' THEN IF(date4<='2012-12-31', 1, 0)
WHEN date3!='0000-00-00' THEN IF(date3<='2012-12-31', 1, 0)
WHEN date2!='0000-00-00' THEN IF(date2<='2012-12-31', 1, 0)
END

但效果不是很好,例如,此查询返回的行的最早日期是 2013 年。我不知道 CASE 是否是正确的开始方法。有任何想法吗??感谢您的宝贵时间!

最佳答案

您可以通过 GREATEST 轻松使用它

SELECT name , date1 date_start, GREATEST(date2,date3,date4,date5) date_end
FROM events

然后会这样输出

 NAME   DATE_START  DATE_END
jack 2013-05-24 2013-05-25
peter 2013-06-01 2013-06-30

在这里THE DEMO SQLFIDDLE

关于php - MySQL - 根据值选择列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14004022/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com