SELECT *
FROM afspraken
WHERE user_id = '2'
AND datum > '2012-06-05'
OR (
user_id = '2'
AND datum = '2012-06-05'
AND begintijd >= '22:47'
)
ORDER BY datum DESC , begintijd ASC
以上是我的查询..虽然我应该得到零结果我仍然得到一个是:
id user_id datum begintijd opmerking
114 2 2012-06-05 9:30 Deze afspraak is online gemaakt.
现在如果我有正确的话,这个查询有2个选项来给出结果..这是: user_id必须相同且日期必须高于2012-06-05 ..由于它的日期相同,因此不会给出结果..
现在第二个选项是user_id相同时,日期是相同的,当开始时间相同或更高时。现在查询的时间是22:47 ..数据库中的时间是早上9:30。早上9:30如何高于或等于22:47 ??
id int(10)
user_id int(10)
datum date
begintijd varchar(5)
opmerking varchar(8000)
reminder int(10)
答案 0 :(得分:8)
您的begintijd
列似乎是varchar
列。
因此,作为字符串,'22:47' < '9:30'
。
解决方案是将您的begintijd
列转换为time
数据类型。
答案 1 :(得分:1)
如果您能够更改数据库布局,为什么不使用DATETIME,如下所示:
id int(10)
user_id int(10)
afspraak_dt datetime
opmerking varchar(8000)
reminder int(10)
您的数据:
id user_id afspraak_dt opmerking
114 2 2012-06-05 9:30 Deze afspraak is online gemaakt.
示例选择:
SELECT * FORM afspraken WHERE user_id = 2 AND afspraak_dt > '2012-06-05 22:47'
在当天为用户ID 2选择所有afspraken
SELECT * FORM afspraken WHERE user_id = 2 AND DATE(afspraak_dt) = '2012-06-05'
选择whith unix时间戳(将来为用户2选择所有afspraken)
SELECT * FROM afspraken WHERE user_id = 2 AND UNIX_TIMESTAMP(afspraak_dt) > NOW()
MySQL datetime有许多用于处理日期和时间的选项。见http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html
答案 2 :(得分:-1)
我们的想法是将您的时间列和值投射到时间:
SELECT CAST('20:05' AS Time) > CAST('9:06' AS Time) #returns 1 (compares times - what you want)
SELECT '20:05' > '9:06' #returns 0 (compares strings - not what you want)
了解更多here。