Özellikle tarihleri ​​dışlamak için bir SQL sorgusu değiştirme

1 Cevap php

Ben belirli bir ay için, onlar "görev" olmuştur olacağı gün sayısını hesaplamak, belirli bir "bölge" içinde tüm kullanıcılar için ben kullanmak oldukça uzun bir SQL sorgusu var. Bu hafta sonları ve hafta içi içine bozuldu. İşte php / SQL deyimi:

 $result = mysql_query("

 SELECT fname, lname, MONTH( eventDate ) AS MONTH , 
    SUM( IF( WEEKDAY( eventDate ) <=2, 1, 0 ) 
       OR IF( WEEKDAY( eventDate ) = 6, 1, 0 )) AS WeekdayCount, 
    SUM( IF( WEEKDAY( eventDate ) = 4, 1, 0 ) 
       OR IF( WEEKDAY( eventDate ) = 5, 1, 0 ) 
       OR IF( WEEKDAY( eventDate ) = 3, 1, 0 )) AS WeekendCount, 
    SUM( IF( secondary =0, 1, 0 ) ) AS `Primary`, 
    SUM( IF( secondary =1, 1, 0 ) ) AS `Secondary` 
 FROM eventcal AS e 
 LEFT JOIN users AS u ON e.primary = u.username 
 WHERE e.region = '$region' AND MONTH( eventDate ) = '$month' 
 GROUP BY fname, lname, MONTH( eventDate ) 
 ORDER BY lname

");

Ne yazık ki, farklı bölgeler için, haftanın farklı günleri, hafta sonları ve hafta içi olarak kabul edilmektedir - Yukarıda gördüğünüz gibi. Yani Pazar günü hafta sonu kabul edilemez. Ama burada önemli değildir.

- Eki 13, 2009 "sayısında 10 Ekim 2009 herhangi günleri dahil etmeyin: Benim sorunum söylemek istiyorum, bir.

Herkes söylemek bu SQL nasıl değiştirebileceğini biliyor mu? Ya da ben yazabilirim küçük bir PHP komut dosyası var mı?

Teşekkürler!

1 Cevap

(Sadece 'GROUP BY' önce) nerede maddesinde ekleyebilirsiniz

AND eventDate NOT BETWEEN '2009-10-10' AND '2009-10-13'

NOT: arasındaki deyimi veritabanına bağlı olarak farklı çalışabilir - bu kadar alternatif, aralık başında veya sonunda tam olarak düşmek sonuçlarını dahil veya hariç olabilir yani, kapsayıcı veya özel olabilir:

AND (eventDate<'2009-10-10' OR eventDate>'2009-10-13')

Ayrıca farklı veritabanları üzerinde farklı ele alınır bir düz metin sql sorgusunda bir tarih dahil, unutmayın, bu yüzden veritabanının belgeleri okuyun. Yukarıdaki postgres'in çalışacaktır.