prosim o pomoc s dotazem
14 příspěvků
Archiv diskusního fóra
Fórum je uzavřené a slouží pouze ke čtení. Některé informace mohou být zastaralé.
-
Potreboval bych sestavit dotaz a nevim, jak na to, pomuze mi nekdo? Situace je nasledujici: mam 3 tabulky: 1. uzivatele 2. dokumenty 3. zaznamy Pokud nektery z uzivatelu potvrdi libovolny dokument z tabulky dokumenty, zapise se do tabulky zaznam zapis s jeho ID, ID dokumentu a dalsimi udaji. Ja potrebuju sestavit dotaz, ktery zjisti, ktere dokumenty jeste dotycny uzivatele nepotvrdil. Slo by to tak, ze bych jednim dotazem vybral vsechny dokumenty a pak je prochazel a u kazdeho dalsim dotazem overoval, zda existuje zaznam o jeho potvrzeni danym uzivatelem. Pokud ano, nic by se nedelo, pokud ne, vypsal by se nejaky vystup a navysilo vlastni pocitadlo vysledku. Nicmene tento zpusob se mi nehodi, ponevac bych to potreboval mit vse v jednom dotazu. Vysledky totiz pote strankuju a v tom skripte vyuzivam fce mysql_num_rows($vysledek) a mysql_data_seek($vysledek, ($stranka*$kolik-$kolik))) a to by pak nefungovalo, pokud bych pro celkovy pocet zaznamu pouzival to vlastni pocitadlo. Nevite nekdo, jak tedy sestavit dotaz typu: "vyber vsechny dokumenty z tabulky 'dokumenty', kde v tabulce 'zaznamy' neexistuje zaznam o potvrzeni tohoto dokumentu timto uzivatelem"? predem dikas za kazdou radu
-
dobrouběž spát a kašli na to:)
-
select * from dokumenty where not exists (select * from zaznamy where potvrzeni=ok) ale jestli to jde v MySQL nevím.
-
zkusil jsem: SELECT * FROM dokumenty WHERE NOT EXISTS (SELECT * FROM dokumenty, zaznamy WHERE zaznamy.id_dokumentu = dokumenty.id_dokumentu AND zaznamy.id_uzivatele = 'userID') ..vyhodilo mi to ale chybu syntaxe a nevim, kde je tedy chyba :o( ----------------------------------------- #1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'EXISTS ( SELECT * FROM dokumenty, zaznamy WHERE ... -----------------------------------------
-
Subselecty tahle verze mySQL jeste nezvlada
-
dobre a jde to nejak obejit?
-
file:///C:/mysql/Docs/manual_toc.html#Rewriting_subqueries The queries: SELECT * FROM t1 WHERE id NOT IN (SELECT id FROM t2); SELECT * FROM t1 WHERE NOT EXISTS (SELECT id FROM t2 WHERE t1.id=t2.id); Can be rewritten as: SELECT table1.* FROM table1 LEFT JOIN table2 ON table1.id=table2.id WHERE table2.id IS NULL;
-
Nevim jak to chodí na web zdarma, jak a kam se zadávaj SQL příkazy, a jak to vypadá. Díky za odpověď
-
1) Založ si příště nový téma, ať to tady je přehlednější 2) Existuje tu nástroj pro správu MySQL "phpMyAdmin" (Administrace/Nastavení/phpMyAdmin) Add 2): Za předpokladu, že trochu umíš PHP a SQL
-
zkusil jsem to tedy pres JOIN, naslednym zpusobem: SELECT rd2_dokumenty.* FROM rd2_dokumenty LEFT JOIN rd2_zaznamy ON rd2_dokumenty.id_dokumentu = rd2_zaznamy.id_dokumentu WHERE (rd2_zaznamy.id_dokumentu) IS NULL ..to funguje, nicmene... Ja tenhle dotaz vypise vsechny dokumenty, ktere nemaji v tabulce rd2_zaznamy zadny zaznam. Ja vsak potrebuji, aby mi to vypsalo dokumenty, ktere nemaji v tabulce rd2_zaznamy zaznam od KONKRETNIHO UZIVATELE. Myslel jsem, ze bude stacit mirne pozmenit dotaz na: SELECT rd2_dokumenty.* FROM rd2_dokumenty LEFT JOIN rd2_zaznamy ON rd2_dokumenty.id_dokumentu = rd2_zaznamy.id_dokumentu WHERE (rd2_zaznamy.id_dokumentu AND rd2_zaznamy.id_uzivatele = '$uid') IS NULL ...to ale nefunguje, na tuto podminku uz to nereaguje. Nevite nekdo, jak ji do toho zakomponovat?
-
ja bych to napsal spis takhle, ale nezkousel sem , jestli to opravdu funguje... ------------------ SELECT rd2_dokumenty.* FROM rd2_dokumenty LEFT JOIN rd2_zaznamy ON rd2_dokumenty.id_dokumentu = rd2_zaznamy.id_dokumentu WHERE rd2_zaznamy.id_dokumentu IS NULL AND rd2_zaznamy.id_uzivatele = '$uid';
-
tak to, bohuzel, nejde... vysledkem neni zadny vypis IMHO se ty 2 podminky navzajem vylucuji, takze to ani nikdy nic vypsat nemuze, nevim...
-
jasně, že se to tluče, ty se musíš ptát na id z tabulky, kde to je, tety rd2_dokumenty ne rd2_zaznamy. Tedy: SELECT rd2_dokumenty.* FROM rd2_dokumenty LEFT JOIN rd2_zaznamy ON rd2_dokumenty.id_dokumentu = rd2_zaznamy.id_dokumentu WHERE (rd2_zaznamy.id_dokumentu IS NULL) AND (rd2_dokumenty.id_uzivatele = '$uid'); jestli tam nic takového (rd2_dokumenty.id_uzivatele) není, tak to tam bude třeba dodělat.
-
diky, uz jsem to vyresil nasledovne: SELECT * FROM rd2_dokumenty LEFT JOIN rd2_zaznamy ON ( ( rd2_dokumenty.id_dokumentu = rd2_zaznamy.id_dokumentu ) AND ( rd2_zaznamy.id_uzivatele = '$userID' ) ) WHERE ( ( (rd2_zaznamy.id_dokumentu) AND (rd2_zaznamy.id_uzivatele = '$userID') ) IS NULL ) AND rd2_dokumenty.stav_dokumentu = '$docState'