MySQL / PHP olaylar için zaman bazlı kaynak kullanılabilirliği

1 Cevap php

Bir olay sistem için ben bir olay için yeterli kaynak olup olmadığını kontrol etmeniz gerekir. Olaylar aa başlangıç ​​ve bitiş zaman damgası ve kaynakların bir dizi (basitlik uğruna biz kaynak sadece 1 tipi olduğunu varsayıyoruz) ihtiyacı vardır. Yeni bir olay rezervasyonu yaparken eğer mümkünse, bir kontrol yapılmalıdır. Bütün olaylar doktrin merkezli php nesnelerdir, damgaları bir daha spesifik dakikadan fazla olması gerekmez.

Ben aşağıdaki gibi bir örnek sıkıntılar içine çalıştırıyorum:

  • 1 kaynak 12:00-13:00 gereklidir
  • 1 kaynak 13:00-14:00 gereklidir
  • Yeni bir olay 12:00-14:00 1 kaynak istediği oluşturulur

Kullanıcının biz 2 kaynakların toplam sahip varsayalım, o zaman bu mümkün olmalıdır. Şu anda (yani 12:00-14:00) olayı yeni bir örtüşme tüm olayları seçin, ve bu olaylar için gerekli tüm kaynakların toplamını alır. Bu yeni bir olay mümkün değildir anlamına gelir.

Yeni bir olay mümkün olmadığını nasıl (verimli) kontrol edebilirsiniz? Sadece bir doktrin sorgusu kullanarak, ya da bir doktrin sorgu kullanarak temel bir seçim yapmak ve daha sonra php ile filtreleme yapıyor ya. Ben ile geldi tek çözüm şimdiye kadar: Bir kaynak çifte ise 12:00-14:00 tüm olayları seçin ve her dakika (yani 120 tekrarlamalar) için kontrol.

1 Cevap

Eğer damgaları ile çalışıyoruz beri bu oldukça kolay olabilir.

Bu gün için tüm olayları çeker. Sonra bunların her biri üzerinde döngü görmek için, varolan bir olayın damgası sınırları ile yeni olayın damgası sınırları çatışma

$conflict = false;
foreach($arrEvents as $event) {
    if ($newStart >= $existingStart && $newStart < $existingEnd) {
        // The start time falls within this event's time
        $conflict = true;
    } elseif ($newEnd > $existingStart && $newEnd <= $existingEnd) {
        // The end time falls within this event's time
        $conflict = true;
    } elseif ($newStart <= $existingStart && $newEnd >= $existingEnd) {
        // Existing event falls completely within the new event
        $conflict = true;
    }
}

Açıkçası tüm olaylar üzerinde döngü mümkün olan en verimli yol değildir ama bu verimlilik bir sorun değildi geçmişte kullanılan temel bir çözümdür