1
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)
4

3 回答 3

8

看起来您的begintijd专栏是varchar专栏。

所以,作为字符串,'22:47' < '9:30'.

一个解决方案是将您的begintijd列转换为time数据类型。

于 2012-06-05T21:00:50.807 回答
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'

选择带有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

于 2012-06-05T21:49:53.083 回答
-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)

在这里阅读更多。

于 2012-06-05T21:06:03.227 回答