Autor | Zpráva | ||
---|---|---|---|
Darth-cz- Profil * |
#1 · Zasláno: 27. 7. 2010, 13:15:24
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 |
#3 · Zasláno: 27. 7. 2010, 13:33:43
Darth-cz-: …a nechcel si náhodou miesto
where users.id like "'. $users_id. '" napísať where users.id='. $users_id ?
|
||
Darth-cz- Profil * |
#4 · Zasláno: 27. 7. 2010, 13:38:22
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 * |
#5 · Zasláno: 27. 7. 2010, 13:39:48
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 * |
#6 · Zasláno: 27. 7. 2010, 13:43:47
Kajman:
Vypadá to, že tvoje řešení funguje. Zkusím to otestovat s více hodnotami, ale zatím ti moc děkuji:) |
||
Časová prodleva: 14 let
|
0