Autor Zpráva
kajaman
Profil
ahoj, všem, mám takový složitější dotaz na MySQL, napadají mě samá šílená řešení, prosím pomozte :-)

schéma:
supervisor(id, jmeno)
akce(id, nazev, id_supervisor)
users(id, jmeno, id_supervisor)
ucasti(id, id_user, id_akce, heslo)

supervisor zakládá svoje uživatele a svoje akce. Pokud se uživatel bude účastnit dané akce, přibude záznam v tabulce účast a bude tam heslo, takže přihlášení uživatele bude jen na danou akci. Může se stát, že uživatel je z akce odejmut, tzn. zmizí mu heslo, ale záznam tam zůstane. A znovu přidán... v tabulce přibude další záznam s novým id a s heslem.

Potřebuji vybrat uživatele, které má smysl přidávat zobrazit, když chci přidat uživatele do akce, tzn že
-buď v tabulce účast nemají záznam
-nebo mají záznam, ale pro jinou akci
-nebo mají záznam pro danou akci, ale mají smazané heslo, tzn. že je někdo z akce odhlásil a nyní je možno ho znovu přihlásit.

zatím jsem se dopracoval k tomuto řešení:
SELECT  u.* FROM users u LEFT JOIN ucasti uc ON u.id = uc.id_user WHERE (u.id_supervisor = '8') 
AND ((uc.id_akce != 21 OR uc.id_akce IS NULL) OR (uc.id_akce = 21 AND uc.heslo = ''))

které ale není správné, protože zobrazuje uživatele i v případě, že byl odebrán a opět přidán
Kajman_
Profil *
Možná takto

SELECT  u.* FROM users u LEFT JOIN ucasti uc ON u.id = uc.id_user AND uc.id_akce = 21 AND uc.heslo <> ''
WHERE u.id_supervisor = '8' AND uc.id_user IS NULL
kajaman
Profil
sakra, ano, myslím, že to funguje.... jo, když to někdo umí, tak to je snadné :-)
moc děkuju!

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