Tarih Aralığı Sorgu MySQL

5 Cevap php

Ben bir referans olarak bugünün tarihi ile iki tarih arasındaki verileri seçmek için bir sorgu gerekir.

Veritabanı "sonu" için "başlangıç" için bir datetime alan ve bir datetime alanı vardır.

$todays_date = date("Y-m-d H:i:s");

$q = "SELECT * FROM news WHERE `end` >= '" .  $todays_date . "' AND `start` >= '" .  $todays_date . "' ORDER BY id DESC";

Sorun sorgu hala başlangıç ​​tarihi bugün daha büyük sonuçlar çekiyor olmasıdır. Öyleyse ben bu gibi bakmak benim sorgu değiştirilmiştir:

 $q = "SELECT * FROM news WHERE `end` >= '" .  $todays_date . "' AND `start` >= '" .  $todays_date . "' AND `start` <='" . $todays_date . "' ORDER BY id DESC";

Bu bir sınırlayıcı olarak bugünün tarihini kullandığı iki datetime alanları arasında seçim verilerinin doğru yolu nedir?

Teşekkürler

5 Cevap

Siz MySQL şimdi timedate fonksiyonunu ve BETWEEN operatörünü kullanabilirsiniz.

Ham SQL:

SELECT * FROM news
WHERE NOW() BETWEEN start AND end;

Not: sunucu MySQL kaynak sağlayarak kullanılan ŞİMDİ () işlevini etkiler varsayılan zaman dilimi, dikkatli olun.

Her iki koşullarda> = var.

Sen tam datetime biçimi 2010-01-05 00:55:09 almak için 2010-01-05 olarak tarihi almak için mysql fonksiyonu CURDATE () kullanın veya şimdi () olabilir. Eğer hemen bugün başlayın veya başlatmak öğeleri bulmak istiyorsanız eğer bağlıdır.

Ve onlar başlamadan önce sona tüm girdileri yok varsayarak olarak sorgu yazabiliriz

select * from news where start = curdate()

Bu çok bitiş tarihlerini çift kontrol muhtemelen iyi bir fikir. Ve zaten başlamış ama henüz sona ermemiş olan haberlerin listesi arıyorsanız gibi görünüyor, bu sorgu, bu gibi görünüyor

select * from news where start < now() and end > now()

Bunu test edilmemiş olmasına rağmen bile, bunu yapmak gerekir

select * from news where now() between start and end

Sizin kilometre değişebilir.

- Mark

Bu benim için çalışıyor. select * from news where start between '$range1' and '$range2'

Ben kullanarak sona erdi herkese teşekkür ederiz:

select * 
from news 
where start = curdate()

Denedim

SELECT * 
FROM news 
WHERE NOW() BETWEEN start AND end;

ve neredeyse düzgün çalıştı. Hem başladı ve aynı anda aynı gün sona erdi haber makaleleri göstermek istemiyordu.

-Tegan