我的数据库中有一个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/

10-10 02:45