Autor Zpráva
Darth-cz-
Profil *
Dobrý den,

chtěl bych vás poprosit o pomoc s následujícím problémem:

Mám mysql dotaz:
SELECT users.jmeno, users.prijmeni,`clanky`.`*`, `klicova_slova`.`keyword`, `klicova_slova`.`target_url`, `klicova_slova`.`id` as kl_id, clanky_klicova_slova.valid, clanky_klicova_slova.datum_vlozeni, clanky_klicova_slova.datum_upravy 
                         FROM `clanky` join `clanky_klicova_slova`
                         on `clanky`.`id` = `clanky_klicova_slova`.`clanky_id` 
                         join `klicova_slova` 
                         on `klicova_slova`.`id` = `clanky_klicova_slova`.`klicova_slova_id` 
                         join users 
                         on users.id = clanky.users_id where users.id like "'. $users_id. '"


Toto mi vypíše správně všechny články podle toho, který uživatel je napsal. Potřeboval bych ale zároveň zobrazit i články, ke kterým má uživatel nastaveno právo. Pokud ale udělám následující:

SELECT users.jmeno, users.prijmeni,`clanky`.`*`, `klicova_slova`.`keyword`, `klicova_slova`.`target_url`, `klicova_slova`.`id` as kl_id, clanky_klicova_slova.valid, clanky_klicova_slova.datum_vlozeni, clanky_klicova_slova.datum_upravy 
                         FROM `clanky` join `clanky_klicova_slova`
                         on `clanky`.`id` = `clanky_klicova_slova`.`clanky_id` 
                         join `klicova_slova` 
                         on `klicova_slova`.`id` = `clanky_klicova_slova`.`klicova_slova_id` 
                         join (users, clanky_users) 
                         on (users.id = clanky.users_id OR clanky_users.users_id = users.id) where users.id like "'. $users_id. '"


Vypíše mi to některé řádky 4x jiné 2x. Jen upozorňuji, že tabulka clanky_users může být pro daného uživatele i prázdná, přesto v ní mohou být údaje pro uživatele jiného... Problém nastal asi právě když jsem tabulku naplnil i daty jiného uživatele tj. uživatele s jiným users_id.

Za jakoukoli pomoc srdečně děkuji
Kajman_
Profil *
Myslím, že tam chybí spojovací podmínka mezi clanky.id a clanky_users.clanky_id.
SELECT users.jmeno, users.prijmeni,`clanky`.`*`, `klicova_slova`.`keyword`, `klicova_slova`.`target_url`, `klicova_slova`.`id` as kl_id, clanky_klicova_slova.valid, clanky_klicova_slova.datum_vlozeni, clanky_klicova_slova.datum_upravy 
                         FROM `clanky` join `clanky_klicova_slova`
                         on `clanky`.`id` = `clanky_klicova_slova`.`clanky_id` 
                         join `klicova_slova` 
                         on `klicova_slova`.`id` = `clanky_klicova_slova`.`klicova_slova_id` 
                         left join clanky_users
                         on (clanky.id=clanky_users and clanky_users.users_id='$users_id')
                         join users
                         on (users.id = clanky.users_id)
                         where clanky_users.users_id is not null or users.id like "'. $users_id. '"

Pokud ale máte klíčová slova s vazbou 1:N, tak se stejně mohou řádky násobit.
tiso
Profil
Darth-cz-: …a nechcel si náhodou miesto where users.id like "'. $users_id. '" napísať where users.id='. $users_id ?
Darth-cz-
Profil *
Kajman:
Zkusil jsem to přepsat takto:
join (users, clanky_users) on (users.id = clanky.users_id OR (clanky_users.users_id = users.id AND clanky_users.clanky_id = clanky.id))


Nicméně to nepomohlo, opět se vypsalo vše 4x, zřejmě ptž mám 4 záznamy v tabulce clanky_users. Nicméně pro daného uživatele jsou jen dva.

Zatím pomohlo toto:
group by clanky.url, klicova_slova.keyword


Ale nevím, jestli je to zrovna nejlepši řešení. Chtěl bych to vyřešit přímo v joinech.
Darth-cz-
Profil *
tiso:
Dotaz pak dále pokračuje limitami a řazením, které jsou pro tento problém ale nepodstatné... like jsem tam dávat nechtěl děkuji :)
Darth-cz-
Profil *
Kajman:
Vypadá to, že tvoje řešení funguje. Zkusím to otestovat s více hodnotami, ale zatím ti moc děkuji:)

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