Autor | Zpráva | ||
---|---|---|---|
urna Profil * |
#1 · Zasláno: 3. 12. 2013, 19:39:17 · Upravil/a: Moderátor (editace znemožněna) 3. 12. 2013, 20:56:11
Dobrý večer, už nějakou hodku se snažím docílit toho aby mi vypsal uživatele, které nemám v oblíbených. Zkoušim toho docílit takto:
$sql = mysql_query("SELECT us.nick FROM user us JOIN oblibeny uz ON us.id = uz.id_oblibeneho JOIN dodatek d ON uz.id_user = d.id_user WHERE uz.id_oblibeneho != '10' AND uz.id_user = '10' AND uz.id_oblibeneho != us.id AND d.pritel = 1"); Ps: když odeberu toto AND uz.id_oblibeneho != us.id , tak vypisuje pravej opak a když tu podmínku nechám, tak nevypíše nic.
|
||
Alphard Profil |
#2 · Zasláno: 3. 12. 2013, 19:57:12
Aby se zahrnuli i neoblíbení, musí tam být left join. Pak doplňte podmínku is null, abyste vyfiltroval oblíbené.
|
||
urna Profil * |
#3 · Zasláno: 3. 12. 2013, 19:58:45
Můžete mi to prosím opravit v kodu? Přiznám se, že vůbec nechápu.
|
||
Alphard Profil |
#4 · Zasláno: 3. 12. 2013, 20:01:34
LEFT JOIN oblibeny uz |
||
urna Profil * |
#5 · Zasláno: 3. 12. 2013, 20:05:32
To bohužel nic nevypíše. Tedy mimo chyby: Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in
|
||
Alphard Profil |
#6 · Zasláno: 3. 12. 2013, 20:15:12
Přidání LEFT by chybu způsobit nemělo, ovšem když se tak stalo, je třeba zjistit jakou Nejčastější potíže s PHP (FAQ) » Warning mysql_fetch_array() (nebo jiná MySQL funkce): supplied argument is not a valid MySQL result resource….
|
||
urna Profil * |
#7 · Zasláno: 3. 12. 2013, 20:19:41 · Upravil/a: urna
Ono spůsobilo chybu, že jsem vymazal i
ON us.id = uz.id_oblibeneho Ted spekuluji nad tou podmínkou, ale pořád nemám ani představu jak by měla vypadat. Já používám snadné dotazy a tohle už je silně nadAle je to stejně špatně. Prasácky jen pro přehled jsem to vyřešil takhle: $vys = mysql_fetch_array(mysql_query("SELECT kraj FROM user WHERE id='".intval($id_uzivatel)."' AND ucet='user' AND pass='".mysql_real_escape_string($token)."'"),MYSQL_BOTH); $que = mysql_query("SELECT * FROM user WHERE id IN(SELECT DISTINCT id_user FROM user_dodatek WHERE id_user != '".intval($id_uzivatel)."' AND pritel='1') AND ucet='user' AND kraj='".$vys["kraj"]."'"); while($ro = mysql_fetch_assoc($que)){ if(mysql_result(mysql_query("SELECT COUNT(*) FROM oblibeny_uzivatele WHERE id_user='".intval($id_uzivatel)."' AND id_oblibeneho='".$ro["id"]."'"),0) == 0){ $vysledky[] = $ro["id"]; } } $vysledky = implode(",",$vysledky); $kolik = mysql_result(mysql_query("SELECT COUNT(*) FROM user WHERE id IN(".$vysledky.")"),0); |
||
Kajman Profil |
Pokud vynechám něco s tím dodatkem, tak to můžete napsat např. takto.
SELECT us.nick FROM user us LEFT JOIN oblibeny uz ON us.id = uz.id_oblibeneho AND uz.id_user = 10 WHERE us.kraj = '$kraj' AND us.is != 10 AND uz.id_oblibeneho IS NULL |
||
urna Profil * |
#9 · Zasláno: 3. 12. 2013, 20:50:34 · Upravil/a: urna
Takhle to vypada dobře. Snad zvládnu napojit ty další podmínky a zbavím se tý přešernosti.
Tak další průser. Když chci dodat vynechanou tabulku, tak mi to sice nevypíše chybu, ale prázdný výsledek SELECT us.nick FROM user us LEFT JOIN oblibeny uz ON us.id = uz.id_oblibeneho AND uz.id_user = 10 JOIN user_dodatek d ON uz.id_user = d.id_user WHERE us.kraj = '$kraj' AND uz.id_oblibeneho IS NULL Bude to znít blbě, ale můžu poprosit i o druhou část tabulky? Nějak se mi to vůbec nedaří skompletovat. Děkuju |
||
Kajman Profil |
Ten přidaný left join udělá to, že zkusí najít příznak oblíbenosti aktuálním uživatelem (ale díky left joinu zachová data z tabulky user i když se k nim řádek v oblibenych nenajde). Podmínkou is null ve where se vyberou ty, které nebyly nalezeny. Proto nedává smysl hledat k nenalezeným řádkům spojení v dodatku.
Dodatek by šel připojit k tabulce user... tedy ON us.id = d.id_user |
||
urna Profil * |
#11 · Zasláno: 3. 12. 2013, 23:16:20 · Upravil/a: urna
Dodatkové řešení je pro to aby ve výsledku nebyl tázající uživatel a zaroveň musí souhlasit.
nic co tam je není navíc. Sice je to prasácky napsaný, ale vše tam má svůj význam. Ono přesně jak to mám teď je to perfektně funkční, ale taky dost náročný proces dotazu. Navíc nevzhledný :-) proto se snažím to dát do jednoho dotazu. Ten kod sice není viditelný, ale pro můj dobrý pocit. Dobrý už jsem to vyřešil. Stačilo se trošku zamyslet :-) Děkuju moc |
||
urna Profil * |
#12 · Zasláno: 4. 12. 2013, 00:28:21
Jenom mi nejde do hlavy poslední věc a to je ta, že mi vypisuje jinýho uživatele, ale já mám stejné nastavení. Chová se to přesně jak potřebuju, ale měl by vypsat i muj nick protože tam nikde nemám podmínku, že můj má ignorovat.
$sql = mysql_query("SELECT us.nick FROM user us LEFT JOIN oblibeny_uzivatele uz ON us.id = uz.id_oblibeneho RIGHT JOIN user_dodatek d ON us.id = d.id_user WHERE us.kraj='".$vys["kraj"]."' AND d.pritel='1' AND uz.id_oblibeneho IS NULL"); |
||
Časová prodleva: 10 let
|
0