Autor Zpráva
Jan Knížek
Profil
Dobrý den,
mám problém s dotazem LEFT JOIN. Mám dvě tabulky, které jsou propojeny přes ID a potřebuji vypsat všechny řádky první tabulky, pro které neexistuje záznam, kde je ID stejné jako v první tabulce a ID_uzivatele odpovídá některé hodnotě.
Zkusil jsem WHERE id_uzivatele NOT = 2, ale to vypíše pouze řádky, kde ID_uzivatele existuje, ale nerovná se dané hodnotě. Ja potřebuji vypsat i ty řádky, kde neexistuje žádné ID_uzivatele.
První tabulka vypadá takhle:
ID | jmeno
druhá:
ID | ID_uzivatele
hodnot druhé tabulky, které odpovídají jednomu řádku první, může být několik.
Joker
Profil
Jan Knížek:
Co zkusit ještě tam přidat OR id_uzivatele IS NULL?
Jan Knížek
Profil
Teď jsem si uvědomil, že jsem to napsal špatně. Mám u jména podle první tabulky přiřazeno několik uživatelů. Když tam není žádný uživatel, vyřeší to podmínka IS NULL, ale když tam mám několik uživatelů včetně toho testovaného, tak ho stejně zobrazí, protože ten druhý uživatel odpovídá podmínce a to mysql stačí. (aspoň to takhle chápu).
Jan Knížek
Profil
Nakonec jsme to udělal takto:
WHERE NOT EXISTS(SELECT id_uzivatele FROM prectene WHERE prectene.id_uzivatele = $_SESSION[id_uctu_knih] AND prectene.id_knihy = knihy.id) OR prectene.id_uzivatele IS NULL

Nevím jak je to rychlé a efektivní, ale nic jiného mě nenapadlo.
Kajman_
Profil *
Knihy, které vůbec nikdo nepřečetl?

select k.* from knihy k left join prectene p on k.id=p.id_knihy where p.id_knihy is null


Knihy, které ještě nepřečetl přihlášený uživatel?

select k.* from knihy k left join prectene p on k.id=p.id_knihy and p.id_uzivatele=42 where p.id_knihy is null
Jan Knížek
Profil
[#5] Kajman
Aha, tohle mě nenapadlo. Díky

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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

0