我的数据库中有一个events表,每个event都可以
最多有5次不同的约会。
表中的Date1总是早于date2、date2早于date3等。
在搜索表单中给定两个日期,我试图找到它们之间的事件。
我的桌子设计如下:
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中搜索,如果它是空的,则必须在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年。我不知道从案例开始是否是正确的方法。
有什么想法吗??谢谢你的时间!
最佳答案
您可以在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/