ay arasında çek söyleyebilirim sql notasyonu var?

4 Cevap php

Ben yıl, herhangi bir yılın ve her yılın belirli aylarında gerçekleşecek bir etkinlik tablosunda yinelenen olayları saklamak ediyorum. Örneğin;

CREATE TABLE events ( 
  event_id tinyint(3) unsigned NOT NULL auto_increment, 
  name varchar(255) NOT NULL, 
  month_from tinyint(3) unsigned NOT NULL, 
  month_to tinyint(3) unsigned NOT NULL, 
  PRIMARY KEY (event_id) ) 
ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=3; 

INSERT INTO events 
  (event_id, name, month_from, month_to) 
VALUES 
  (1, 'Event ABC', 5, 11), (2, 'Event XYZ', 12, 4);

Event ABC - takes place every year during May - Nov and Event XYZ - takes place every year during Dec - Apr

Benim olaylar tabloda ben sayısal değerler olarak month_from ve month_to saklamak ediyorum.

Ne yapmam mümkün istiyorum geçerli ayı (Ekim) almak ve doğru olay "Olay ABC" Bana dönmek için bir sql sorgusu içine geçmesi söylüyorlar. Ama aynı zamanda ben buna geçmek isteyen bir gelecek ay Şubat benim için "Olay XYZ dönmek" gerektiğini söylüyorlar

Ben mantıklı umut?

4 Cevap

select * from tbl where (month_from <= $YOUR_MONTH and month_to >= $YOUR_MONTH) or (month_from > month_to and (month_to >= $YOUR_MONTH or month_from <= $YOUR_MONTH)

Bu da Aralık-Nisan aralıkları için çalışacak

Deneyin:

 FROM TABLE t
WHERE @month BETWEEN t.month_from AND t.month_to

Eğer tarihe geçmek istiyorsanız ve eğer karşılaştırma için güncel ay olsun:

 FROM TABLE t
WHERE MONTH(@your_date) BETWEEN t.month_from AND t.month_to

Referans: MONTH

select * from tbl
where month_from <= <YOUR_MONTH> and month_to >= <YOUR_MONTH>

<YOUR_MONTH> month_from ve month_to alanlara anlam eşdeğer bir değerdir sağlar.

GÜNCELLEME: Sadece Belki Nisan için Aralık ve Jan olay için iki aralık Ara oluşturabilirsiniz Aralık-Nisan ikinci örnek fark

Bu yapmak gerekir:

SELECT * FROM events WHERE month_from <= $your_month AND month_to >= $your_month

Bu tamsayılar ay gibi bunlarla sınırlı değildir. MySQL (veya veritabanı için eşdeğer) ile TARİH veri türünü kullanın ve yukarıdaki gibi aynı sorgu kullanabilirsiniz. Sizin veritabanı "anlayabilecek" <,>, = senin TARİH alanlar için operatörler.