Yarı Complicated PHP / MySQL Select Bildirimi

3 Cevap php

Şu anda insanların donanımları belirli parçaları için rezervasyon yapmak için ben kullanıyorum 3 tablolar var.

İşte benim tablolar şunlardır:

tblEquipment:
     id        name        description
     1       Camera        Takes pictures
     2       Projector      Projects pictures
     3       Laptop         Portable Computer


tblEvents:
     id        start                 end              first_name         last_name              email
     1     2009-08-10      2009-08-11          John                 Doe                 jd@email.com
     2     2009-08-15      2009-08-16          Jane                 Doe                 jd@email.com


tblEventData:
     id         eventID             equipmentID
     1              1                         1             
     2              1                         2

Şu anda, bir kullanıcı, kendi istenen kez bir sorgu sunacağını sonra mevcut tüm donanımları göreceksiniz.

EquipmentID 3 (Laptop): Bir kullanıcı 8/10-8/11 arasında ekipmanı arıyor Yani, yukarıdaki exampe kullanarak, o mevcut olan tek cihaz olduğunu göreceksiniz.

Nasıl istendiği zamanlarda dayanan sadece mevcut ekipman dönmek için benim sorgu oluşturabilir?

Bu şimdiye kadar ile geldim budur, ancak çalışması için alınamıyor:

SELECT tblequipment.id as name, tblEvents.start as start, tblEvents.end as end
FROM tblEquipment
INNER JOIN tblEventData on tblEventData.equipmentID = tblEquipment.id
INNER JOIN tblEvents on tbleventdata.eventID = tblEvents.id
WHERE NOT EXISTS(SELECT * FROM tblEvents WHERE $end >= start AND $start <= end)

Herhangi bir fikir? Teşekkürler!

3 Cevap

Var sorgu şimdi sahip bir NOT EXISTS sadece events verilen başlangıç ​​ve bitiş saatleri arasında meydana arıyor. Diğer bir deyişle, "sürece bu zaman diliminde herhangi bir etkinlik olduğu gibi tüm ekipman seçin." İstediğin değil. İstediğiniz: "sürece bu zaman diliminde herhangi bir etkinlik using that equipment olduğu gibi tüm ekipman seçin."

Böyle bir şeye çevirir:

SELECT tblequipment.id as name
FROM tblEquipment
WHERE NOT EXISTS 
  (SELECT * FROM tblEvents 
   INNER JOIN tblEventData ON (tblEvents.id = tblEventData.eventID)
   WHERE $end >= start AND $start <= end
   AND tblEventData.equipmentID = tblEquipment.id)

EDIT: Onlar size hiç çalışıyoruz soruyla ilgili değil sadece ekipman that's reserved at some point, seçeneğini ısrar beri ben de, dış sorgudan JOIN s kaldırdık cevap.

Sen saklıdır hangi ekipman bilmek istiyorum, ama NOT EXISTS sorgusu içinde, sizin nihai sonuçlarının onu hariç amaçlar için yok.

O yüzden tırnak ucunu koyarak deneyin

`end`

Ben mysql komut yerine bir alan olarak sonuna tercümanlık düşünüyorum.

"End" SQL ayrılmış bir sözcüktür. Başka tblEvents.end şey adlandırma sahipsiniz.