:分をあなたはこのような何かを行うことができます:
SELECT t.* FROM `tasks` t
WHERE t.`due_date` >= DATE(NOW())
AND ( (t.`due_date` = DATE(NOW()) AND t.`due_time` >= TIME(NOW()))
OR (t.`due_date` > DATE(NOW()))
)
最初のカットはDUE_DATEする比較、後で今日または起因しているすべてのタスクです。それにはあまりにも多くのものが含まれているため、今日は当然ではあるが、現在の時間前の作業を取り除く必要があります。
"よりシンプルな"ように見える他のクエリ方法があります。上記の方法では、述語を裸の列に保持するので、MySQLは適切なインデックスで範囲スキャン操作を効果的に使用できます。
フォロー
私がキーに複数の列とページングのために、前にこのタイプの問合せを行ってきました。何かが元のクエリについて私を悩ませていた、それは本当に必要以上の条件があった。 (何due_time上> =条件だった私を投げた。)
私はこれが等価であると信じて:
SELECT t.* FROM `tasks` t
WHERE t.`due_date` >= DATE(NOW())
AND (t.`due_date` > DATE(NOW()) OR t.`due_time` >= TIME(NOW()))
理由だけではなく、 'datetime'列として期日を保存し、すべてのこの大騒ぎを保存していませんか? – Mureinik
これらの2つのフィールドのデータタイプは何ですか? –
"due_date"と "due_time"の列の*データ型*は...ですか? (これは質問ですか、ステータスレポートですか?) – spencer7593