Autor | Zpráva | ||
---|---|---|---|
freeTel Profil * |
#1 · Zasláno: 2. 3. 2020, 05:20:01
Dobré ráno, chci se zeptat zkušenějších jak vypsat pouze jeden záznam? Mám dvě tabulky chci filtrovat podle města. Problém je, že mi vypisuje i záznam co spadá do jiného města. V jedné tabulce mám TÁBOR a v druhé PRAHA. Zkoušel jsem to zamezit podmínkou IS NULL, ale stejně vypisuje oba výsledky. Jde mi o to, pokud existuje v tabulce u uživatele záznam o doručovací adrese, tak upřednostnit toto město. Pokud není, tak vyhledá z tabulky user. V případě, že je záznam o městě v tabulce dorucovaci_adresa, tak zobazí jen z města z tabulky dorucovaci_adresa a tabulku user bude ignorovat. Snad jsem to popsal srozumitelně a je tam jen drobná chybička. Děkuji předem za rady
SELECT ob.id_user,us.jmeno,us.mesto,us.nick,us.mail,us.posledni_pristup,us.lokace,us.pass FROM objednavky ob left JOIN dorucovaci_adresa do ON ob.id_user = do.id_user AND LOWER(do.A_mesto) LIKE '%".$v."%' left JOIN user us ON ob.id_user = us.id AND LOWER(us.mesto) LIKE '%".$v."%' AND do.id_user IS NULL WHERE $or GROUP BY us.mail |
||
Kajman Profil |
#2 · Zasláno: 2. 3. 2020, 07:59:22
Nevypisujete žádný sloupec z dorucovaci_adresa, jinak to na první pohled vypadá korektně. Někdy pomůže zazávorkovat joiny, ale to asi nebude tento případ...
FROM ( objednavky ob left JOIN dorucovaci_adresa do ON ob.id_user = do.id_user AND LOWER(do.A_mesto) LIKE '%".$v."%' ) left JOIN user us ON ob.id_user = us.id AND LOWER(us.mesto) LIKE '%".$v."%' AND do.id_user IS NULL Zkuste nachystat vzorová data (obsah tabulek a dotaz s vyplněnými proměnnými $v a $or) s ukázkou problému např. na sqlfiddle. |
||
freeTel Profil * |
#3 · Zasláno: 2. 3. 2020, 08:05:03
Děkuji, hned jak přijdu z práce, tak se na to podívám a případně to dám jako ukázku
|
||
freeTel Profil * |
Tohle se chová úplně stejně jako bez závorek. sqlfiddle.com/#!9/c5a6c6/3
Omlouvám se, jsem musel db přepsat kv§li stejnému městu ať to je autentické. sqlfiddle.com/#!9/395bc0/2 Předchozí dotaz je na Semily a pod tímto odkazem chci výsledky z Teplic. sqlfiddle.com/#!9/395bc0/3 |
||
Kajman Profil |
#5 · Zasláno: 2. 3. 2020, 11:57:16
Moc nechápu, co Vám nefunguje. Oba dotazy mně přijdou v pořádku.
Jen nevypisujete žádné sloupce z tabulky dorucovaci_adresa, tak jsou u Semil samé null hodnoty ze tabulky uživatelů (protože se našla adresa v doručovací adrese a tedy se nemá připojit žádný řádek z uživatelů). |
||
freeTel Profil * |
Nemá vypsat uživatele pod tímto id (1001207). Protože ten má doručovací adresu Semily
Má se vypsat pod městem Teplice Jiří Žák protože ten nemá jinou dorucovaci_adresu. Jan Hus tam nemá co dělat protože má jinou doručovací adresu: Semily |
||
Kajman Profil |
freeTel:
„Nemá vypsat uživatele pod tímto id (1001207). Protože ten má doručovací adresu Semily“ Ale z tabulky user tam nejsou žádná data navíc. To id 1001207 vypisujete z objednavky, na ni žádná omezení nejsou. Jen to pak zprzníte nesmyslným group by, které by nešlo, pokud by byl server nastaven, aby nesmyslné group by nepovolil. „Má se vypsat pod městem Teplice Jiří Žák protože ten nemá jinou dorucovaci_adresu. Jan Hus tam nemá co dělat protože má jinou doručovací adresu: Semily“ Ale nemá doručovací adresu, ve které je město Teplice. Tohle přeci máte v podmínce. Moc si nejsem jistý, co chcete, ale možná toto. sqlfiddle.com/#!9/395bc0/17 Edit: možná si dodejte distinct (nebo group by) SELECT DISTINCT us.mail FROM user us LEFT JOIN dorucovaci_adresa do ON us.id = do.id_user WHERE Coalesce(Lower(do.a_mesto), Lower(us.mesto)) LIKE '%Semily%' AND us.id IN (SELECT ob.id_user FROM objednavky ob) |
||
freeTel Profil * |
Chtěl jsem to vyzkoušet, ale nevypsalo mi to nic.
$sqli = $mysqli->query(" SELECT ob.id_user,us.jmeno,us.mesto,us.nick,us.mail,us.posledni_pristup,us.lokace,us.pass FROM user us LEFT JOIN dorucovaci_adresa do ON us.id = do.id_user WHERE Coalesce(Lower(do.a_mesto), Lower(us.mesto)) LIKE '%".$v."%' AND us.id IN (SELECT ob.id_user FROM objednavky ob); LIMIT $start,$zobrazit"); Už jsem to rozdýchal. To je přesně ono. Moc děkuji za čas, trpělivost a důvtip |
||
Časová prodleva: 5 let
|
0