为什么我得到这个结果?

时间:2012-06-05 20:55:42

标签: php mysql database

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)

3 个答案:

答案 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