Autor | Zpráva | ||
---|---|---|---|
Jan Knížek Profil |
#1 · Zasláno: 4. 8. 2011, 11:03:51
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 |
#2 · Zasláno: 4. 8. 2011, 11:13:32
Jan Knížek:
Co zkusit ještě tam přidat OR id_uzivatele IS NULL ?
|
||
Jan Knížek Profil |
#3 · Zasláno: 6. 8. 2011, 15:59:10
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).
|
||
Časová prodleva: 7 dní
|
|||
Jan Knížek Profil |
#4 · Zasláno: 13. 8. 2011, 11:39:04
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 |
||
Časová prodleva: 5 dní
|
|||
Jan Knížek Profil |
#6 · Zasláno: 18. 8. 2011, 20:54:26
[#5] Kajman
Aha, tohle mě nenapadlo. Díky |
||
Časová prodleva: 13 let
|
0