nasıl mysql tarihten itibaren bir ay alabilirim

4 Cevap php

Ben bu gibi bir deyimi ile mysql sonuçları almak mümkün istiyorum:

SELECT * 
  FROM table 
 WHERE amount > 1000 

Ama (kullanıcı girişi dayalı) bir ay ve yıl belirli kısıtlı sonucunu almak istiyorum ... Ben böyle çalışıyordu:

SELECT * 
  FROM table 
 WHERE amount > 1000 
   AND dateStart = MONTH('$m')   

... $m Bir ay olmak ama hata verdi.

Bu tablo, aslında iki tarih var: startDate ve endDate ama startDate odaklanıyorum. Giriş değerleri, ay ve yıl olacaktır. Nasıl sonuçlar alır ben ifade SQL deyimi bu yıl bu aya göre mi?

4 Cevap

: Karşılaştırma geriye (startDate DATETIME veya TIMESTAMP veri türü olduğunu varsayarak) var - Sen yakın

SELECT * 
  FROM table 
 WHERE amount > 1000 
   AND MONTH(dateStart) = {$m}

Caveats:


Alternatives:


Sütunlarda fonksiyonları kullanarak dizinleri kullanamazsınız çünkü, daha iyi bir yaklaşım BETWEEN ve STR_TO_DATE fonksiyonlarını kullanmak olacaktır:

WHERE startdate BETWEEN STR_TO_DATE([start_date], [format]) 
                    AND STR_TO_DATE([end_date], [format])

Sözdizimi biçimlendirme için belgelerine bakın.

Reference:


month() işlevini kullanın.

select month(now());

Örneğin

$date = sprintf("'%04d-%02d-01'", $year, $month);
$query = "
  SELECT
    x,y,dateStart
  FROM
    tablename
  WHERE
    AND amount > 1000
    AND dateStart >= $date
    AND dateStart < $date+Interval 1 month
";
mysql_query($query, ...

Bu gibi bir sorgu oluşturmak olacaktır, örneğin

WHERE
  AND amount > 1000
  AND dateStart >= '2010-01-01'
  AND dateStart < '2010-01-01'+Interval 1 month

+ Interval 1 month date_add() için bir alternatiftir.

SELECT Date('2010-01-01'+Interval 1 month)-> 2010-02-01
SELECT Date('2010-12-01'+Interval 1 month)-> 2011-01-01
This way you always get the first day of the following month. The records you want must have a dateStart before that date but after/equal to the first day of the month (and year) you've passed to sprintf().
'2010-01-01'+Interval 1 month doesn't change between rows. MySQL will calculate the term only once and can utilize indices for the search.

Bu deneyin:

SELECT * 
FROM table 
WHERE amount > 1000 AND MONTH(dateStart) = MONTH('$m') AND YEAR(dateStart) = YEAR('$m')