Autor Zpráva
David1256
Profil
Dobrý den,

nedávno jsem tu zakládal téma, kde jsem se ptal, jak udělat dotaz na vybrání již ohodnocených písniček v mojí aplikaci k ohodnocování písniček Dotaz na dvě tabulky zároveň. Teď řeším opačný problém a sice jak udělat dotaz na ještě neohodnocené písničky. Přemýšlel jsem nad tím a prostě jsem to nevymyslel, zkoušel jsem to opět přes JOIN, ale nevymyslel jsem to. Také mě napadlo, jestli v MySQL neexistuje něco jako doplněk k druhému dotazu, ale nic takového jsem nenašel. Struktura DB a popis fungování aplikace je ve vláknu výše. Pokud byste mi s tím někdo poradil, byl bych moc rád.

Děkuji.
Kajman
Profil
Např.

SELECT p.*
FROM   pisnicky p
       LEFT JOIN hodnoceni h
              ON p.id = h.id_pisnicky
WHERE  h.id_hodnotitele = 42
       AND h.id_pisnicky IS NULL
David1256
Profil
Díky moc, nemohl jsem přijít na to, jak vyjádřit "IS NULL", do této doby jsem se s touto konstrukcí nesetkal. Na výpis novinek a podobné základní věci, nebyla potřeba :-). Čím dál tím vidím, jak dokáže být SQL důmyslné. Nicméně ten dotaz nefungoval, ale navedl jsi mě na správnou cestu. Upravil jsem takto a funguje.
SELECT p.*
FROM pisnicky p
       LEFT JOIN hodnoceni h
              ON p.id = h.id_pisnicky
WHERE zadal!='$nick'
       AND h.id_pisnicky IS NULL
Ještě jednou díky moc.
Kajman
Profil
David1256:
zadal!='$nick'

To je divná podmínka. Pokud hledáte písničky, které nehodnotil zvolený uživatel, má tam být rovníko. Pokud písničky, které nikdo nehodnotil, má tam být jen
WHERE h.id_pisnicky IS NULL
David1256
Profil
Kajman:
Nevím no, myslím si, že to mám správně. Pokud bych tam nepřidal „zadal!='$nick'“, tak mi to zobrazí i písničky, které vložil přihlášený uživatel a nechci, aby šlo, aby si mohl uživatel hodnotit písničky, které sám přidal. Předpokládám, že tomu, kdo je tam přidal, se písnička líbí. Respektive tak je ta aplikace myšlena, že ten kdo písničku zadá do systému, tak se mu líbí.
Kubo2
Profil
David1256:
zadal!='$nick'
Nie skôr WHERE NOT `zadal` = '$nick'?
Kajman
Profil
David1256:

Jo, v tom případě tam podmínka patří.
David1256
Profil
Tak to mám přeci jenom ještě špatně. Nyní to funguje tak, že každá písnička jde ohodnotit pouze jedním uživatelem. Může za to AND h.id_pisnicky IS NULL Jenomže já tam potřebuji dostat AND h.id_pisnicky IS NULL where h.id_hodnotitele=42, což by zaručilo, že dotaz vypíše jenom ty písničky, které ještě nehodnotil přihlášený uživatel a né písničky, které nehodnotil ještě žádný uživatel. Jenom nevím, jak to do toho dotazu dostat. 2x where je asi blbost, ale jiná konstrukce mě nenapadá.
Kajman
Profil
Pardon, ta podmínka na hodnotitele nemá být ve where, ale v tom left joinu
SELECT p.*
FROM   pisnicky p
       LEFT JOIN hodnoceni h
            ON p.id = h.id_pisnicky
               AND h.id_hodnotitele = 42
WHERE  p.zadal!='$nick'
       AND h.id_pisnicky IS NULL
David1256
Profil
Kajman:
Díky moc, funguje.

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