Autor Zpráva
mersi
Profil


Potrebujem vyselektovať dostupné izby (dostupnosť je podmienená dátumom v ubytovanie.cas_odchodu)

Moderátor Kajman: Titulek „spojenie 3 tabuliek cez cudzí kľúč“ nevystihuje podstatu dotazu. Příště zkuste prosím vymyslet lepší.
Kajman_
Profil *
Zkuste left joinem připojit kolize uložených ubytování s chtěným termínem. Pak stačí jen vypsat pokoje, kde se žádná kolize nenajde (where id_ubytovanie is null).

Viz. podobné téma.
mersi
Profil
ospravedlňujem sa Vám, vysvetlím to podrobnejšie, ak je ubytovanie.cas_odchodu = '0000-00-00 00:00:00' znamená to, že izba (pridelená tomuto ubytovaniu cez spojovaciu tabulku) je nedostupná (ešte obsadená, zákazník neodišiel) ak je dostupná je tam nejaký datetime uložený

potreboval by som selektovať všetky izby, ktoré nemajú ani raz cez spojovaciu tabuľku pridelené ubytovanie s cas_odchodu = '0000-00-00 00:00:00' alebo ak toto spojenie vrati NULL t.j. este nebola izba pridelená ubytovaniu
mersi
Profil
lenže neviem to ako na to spraviť selekt, skúšal som takto:

SELECT i. * , u . * 
FROM izby AS i
LEFT JOIN izba_ubytovanie AS iu ON iu.id_izba = i.id_izba
LEFT JOIN ubytovania AS u ON u.id_ubytovanie = iu.id_ubytovanie
WHERE u.cas_odchodu IS NULL 
OR u.cas_odchodu !=  '0000-00-00 00:00:00'


to mi však vráti aj nedostupné izby, ktoré už raz mali nastavený iný datetime ako je '0000-00-00 00:00:00' (t.j že už boli raz obsadené)
Kajman_
Profil *
Proč to neděláte podle rady v příspěvku [#2]? Tedy do ON dát prodmínky, kdy to koliduje a do where dát u.id_ubytovanie is null. Podívejte se na ten odkaz, tam to je také tak řešené!
mersi
Profil
no skusil som toto, ale asi tomu nechápem lebo mi to nevrátilo neočakávané objekty

SELECT i . * , u . * 
FROM izby AS i
LEFT JOIN izba_ubytovanie AS i_u ON i_u.id_izba = i.id_izba
LEFT JOIN ubytovania AS u ON u.id_ubytovanie = i_u.id_ubytovanie AND u.cas_odchodu !=  '0000-00-00 00:00:00'
WHERE u.id_ubytovanie IS NULL 
mersi
Profil


mám takéto tabuľky a výsledok by nemal vrátiť v podstate nič, lebo izby sú priradené aj ubytovaniu, ktoré ešte neskončilo (cas_odchodu = '0000-00-00 00:00:00')
Kajman_
Profil *
Tak ještě jednou... do left joinu máte dávat kolizní, tedy
u.cas_odchodu =  '0000-00-00 00:00:00'
mersi
Profil
SELECT i. * , u. * 
FROM izby AS i
LEFT JOIN izba_ubytovanie AS i_u ON i_u.id_izba = i.id_izba
LEFT JOIN ubytovania AS u ON u.id_ubytovanie = i_u.id_ubytovanie
AND u.cas_odchodu =  '0000-00-00 00:00:00'
WHERE u.id_ubytovanie IS NULL 


nerieši to problém
Kajman_
Profil *
Aha, on tam nesmí být left join mezi druhou a třetí tabulkou, bude to potřeba dobře ozávorkovat...
SELECT i.*
FROM   izby AS i
LEFT   JOIN (izba_ubytovanie AS i_u
             JOIN ubytovania AS u
             ON   u.id_ubytovanie = i_u.id_ubytovanie
             AND  u.cas_odchodu =  '0000-00-00 00:00:00')
ON     i_u.id_izba = i.id_izba
WHERE  u.id_ubytovanie IS NULL
mersi
Profil
ďakujem veľmi pekne

masaker, musím si viac naštudovať spájanie tabuliek, aby som tomu rozumel

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0