Takvim olayları sorgulamak için en iyi yolu?

3 Cevap php

Ben bir ay boyunca olayların bir takvim görüntüler bir takvim oluşturma. Her gün daha fazla etkinlik bu gün (kaç personel vs mevcuttur kaç kez, mevcut) için planlanmış olabilir belirlemek çeşitli parametreler vardır.

Benim veritabanı, üç tablo kullanılarak ayarlanır:

  1. Düzenli Takvimi - Bu onlar vb kullanılabilir hangi saat personel mevcuttur kaç özetliyor haftanın her günü için bir dizi oluşturmak için kullanılır
  2. Program Varyasyonları - Bir tarih için varyasyonlar varsa, bu normal program diziden bilgilerini geçersiz kılar.
  3. Etkinlikler - tarihe göre başvurulan Varolan olaylar.

Bu aşamada, kod ayda gün boyunca döngüler ve her gün için 2-3 şeyi denetler.

  1. Programda herhangi bir varyasyon (resmi tatil, kısa saat vb) var mı?
  2. Personelin hangi saatlerde / sayı bu gün için kullanılabilir?
  3. (Personel varsa) kaç olaylar zaten bu gün için planlanan olmuştur?

Adım 1 ve adım 3, bir veritabanı sorgusu gerektiren - Ayda 30 gün varsayarak, bu sayfa görünümü başına 60 sorgularının.

Ben birkaç kullanıcılar için ben çok bir sorun olacağını sanmıyorum, bu ölçek nasıl endişeleniyorum, ama 20 kişi denemek ve aynı zamanda sayfa yüklerseniz, o zaman 1200 sorguları atlar .. .

Daha verimli yapmak konusunda herhangi bir fikir veya öneri büyük mutluluk duyacağız!

Teşekkürler!

3 Cevap

Sana bir gün her sorgu sınırlamak gerekir ediyorum bir iyi bir neden düşünemiyorum. Elbette sadece tarih bir çift arasındaki tüm değerleri seçebilirsiniz.

Benzer şekilde, belirli bir gün için olayları planlanan olayların sayısını almak için bir birleşim kullanabilirsiniz.

Sonra veritabanı sorgu tarafından döndürülen dizinin üzerine (her gün için) bir döngü yapmak.

Bir tablo oluşturun:

t_month (day INT)

INSERT
INTO     t_month
VALUES
         (1),
         (2),
         ...
         (31)

Sonra sorgu:

SELECT   *
FROM     t_month, t_schedule
WHERE    schedule_date = '2009-03-01' + INTERVAL t_month.day DAY
         AND schedule_date < '2009-03-01' + INTERVAL 1 MONTH
         AND ...

Bunun yerine 30 sorguları size bir JOIN ile sadece bir tane olsun.

Diğer RDBMS 's anında rowsets oluşturmak için izin, ancak MySQL doesn't .

Sen, olsa, t_month çirkin ile değiştirebilirsiniz

SELECT  1 AS month_day
UNION ALL
SELECT  2
UNION ALL
...
SELECT  31

I http://rosterus.com ile sorun aynı tür karşı karşıya ve biz sadece sayfanın üstündeki diziler içine verilerin çoğu yüklemek ve daha sonra ilgili veri için dizi sorgulamak. Sayfalar bundan sonra 10x daha hızlı yüklenir.

Yani, ihtiyacınız olan tüm verileri toplamak, bir veya iki geniş sorguları çalıştırmak, uygun anahtarları seçin ve bir diziye her sonucu depolamak. Sonra yerine veritabanının dizi erişebilirsiniz. PHP dizi endeksleme ile, tuşları ... veya birkaç indeksler gibi şeyler her türlü kullanarak çok esnek olduğunu.