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が同じで、日付が同じで、beginningtimeが同じかそれ以上の場合の2番目のオプションです。表示されるクエリの時刻は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

It looks like your begintijd column is a varchar column.

So, as strings, '22:47' < '9:30'.

A solution would be to convert your begintijd column to a time datatype.

于 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'

その日にユーザーID2のすべての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

アイデアは、時間の列と値を Time にキャストすることです。

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 に答える