Autor | Zpráva | ||
---|---|---|---|
Dr.No Profil * |
#1 · Zasláno: 8. 4. 2008, 11:43:35
Resim jeden problem, je to skoro jako hlavolam:\
Mam tabulku v MySQL, (pro zjednoduseni zobrazim prvni 3 sloupce a 6 radku tabulky) ID - vlatnik - nazev -------------------- ID1 - JA - A ID1 - ON - B ID2 - ON - C ID2 - ONA - D ID1 - ONA - E ID1 - TO - F Potrebuji (spravne zadat dotaz do MySQL)/(vytvorit skript), ktery zobrazi zaznamy s vlastnikem JA (ID pouze jednou) + s vlastnikem Jakykoli jiny(ID muze byt i duplicitni) tzn:A,C,D je spravna odpoved. Predpokladam, ze by se to mohlo resit na zaklade pole, do ktere se vlozi ID s vlastnikem JA a pak se jednotlive zaznamy porovnavaji(podle ID) s polem a ty ktere nejsou v poli se vypisi tzn: C,D -> k nim se pote prictou vsechny zaznamy, kde vlastnikem je JA tzn:A. Vysledek je C,D,A. Problem je, ze musim zaznamy radit abecedne podle nazvu: (napr: A,C,D nebo D,C,A), ale s pouzitim 2 mysql dotazu,to nedovedu. Nebo jdou vysledky s vice dotazu sloucit a posleze seradit podle abecedy? Moc diky za vas cas a za pripadnou radu. |
||
ninja Profil |
#2 · Zasláno: 8. 4. 2008, 12:34:08
SELECT DISTICT id, vlastni, nazev FROM tabulka WHERE vlastni = "JA" UNION (SELECT * FROM tabulka WHERE vlastni <> "JA") ORDER BY nazev;
|
||
BetaCam Profil |
#3 · Zasláno: 8. 4. 2008, 12:35:07
No ono jde taky o to jaké vstupní informace pro SQL dotaz máš.
Pokud sem to správně pochopil tak to můžeš napsat třeba takhle : SELECT id, vlastnik, name FROM tabulka WHERE vlastnik = 'JA' LIMIT 1 UNION SELECT id, vlastnik, name FROM tabulka WHERE vlastnik != 'JA' AND id != ( SELECT id FROM tabulka WHERE vlastnik = 'JA' LIMIT 1 ) ORDER BY name ASC Za předpokladu, že máš pouze vlastníka. Pokud by si měl i ID vlastníka tak můžeš ten poddotaz odstranit a rovnou tam nacpat ID, ale zas je otázka jestli jestli to není tak trochu overkill. |
||
BetaCam Profil |
#4 · Zasláno: 8. 4. 2008, 12:45:03
ninja
SELECT DISTICT id, vlastni, nazev FROM tabulka WHERE vlastni = "JA" UNION (SELECT * FROM tabulka WHERE vlastni <> "JA") ORDER BY nazev; Tak takhle pochybuji, že ti to odfiltruje vlastníka JA aby si ho tam měl jenom jednou. :) |
||
Dr.No Profil * |
#5 · Zasláno: 8. 4. 2008, 12:57:17
Moc DIKY za prispevky. nevedel jsem ze MySQL je tak schopny nastroj. Jdu se vzdelavat:)
|
||
BetaCam Profil |
#6 · Zasláno: 8. 4. 2008, 13:19:06
Dr.No
Moc DIKY za prispevky. nevedel jsem ze MySQL je tak schopny nastroj. Jdu se vzdelavat:) Přeji hodně štěstí při studiu. :) Nic méně nepsal bych, že MySQL je mocný nástroj, ale že SQL je mocný nástroj. :) |
||
Dr.No Profil * |
#7 · Zasláno: 8. 4. 2008, 13:44:06
Jeste jedna vec (asi jsem to predtim nepopsal presne), ten vlastnik = "JA" muze byt v tabulce i vicekrat a ve vysledku zobrazi vzdy! Ale pokud vlastnik "JA" nema k sobe prirazene nejake ID, tak tyto neprirazene ID se vypisi vsechny. Plati jen, ze stejne ID nemuze mit stejneho vlastnika vicekrat.
Myslim, ze dotaz BetaCama je na spravne ceste ,ale vynecha se LIMIT 1 a poddotaz ( SELECT id FROM tabulka WHERE vlastnik = 'JA' LIMIT 1 ) znamena, ze vezme jedine ID od vlastnika "JA", ja potrebuji aby vzal POLE(ID) (kde vlastnik="JA") a pak (predchozi cast dotazu) UNION SELECT id, vlastnik, name FROM tabulka WHERE vlastnik != 'JA' AND id != pole(ID) Lze neco takoveho napsat? projde dotaz celym polem, nebo vezme jen prvni prvek? Diky |
||
BetaCam Profil |
#8 · Zasláno: 8. 4. 2008, 14:18:39
Tak moment ted sem se v tom zamotal úplně. Ty chceš vypsat nejdříve všechny ID ke kterým je přiřazen vlastník "JA" a pak chceš vypsat všechny ID ke kterým není vlastník "JA" přiřazen??
|
||
Dr.No Profil * |
#9 · Zasláno: 8. 4. 2008, 14:31:59
Tak ja uvedu jeste jeden priklad k tomu zadani, pridam do nasi tabulky radek navic:
ID - vlatnik - nazev -------------------- ID1 - JA - A ID1 - ON - B ID2 - ON - C ID2 - ONA - D ID1 - ONA - E ID1 - TO - F ID2 - JA - G <-tento -vysledkem dotazu se vypise A,G (ID1 i ID2 maji vlastnika "JA", tak duplicitni ID1 a ID2 me nezajimaji) -pokud by tam byl o posledni radek (G) mene, tak se vypise A,C,D (ID1 ma vlastnika "JA", tak jine duplicitni ID1 me nezajima, + ID2 se vypisi i duplicitne, protoze vlastnik "JA" u nich neexistuje) Ted uz myslim, ze je to jasne. Uz z toho zacinam blbnout.Pls Help |
||
BetaCam Profil |
#10 · Zasláno: 8. 4. 2008, 14:34:48 · Upravil/a: BetaCam
Nebo jinak řekněme, že máš v DB následující data :
id vlastnik nazev 1 JA A 1 ON B 2 ON C 2 ONA D 1 ONA E 1 TO F 1 JA G 3 JA H 2 JA CH 4 ONA I Jaké data chceš, aby ti vrátil dotaz?? |
||
BetaCam Profil |
#11 · Zasláno: 8. 4. 2008, 14:39:57
Dr.No
Ted uz myslim, ze je to jasne. no jestli jasné to nevím, ale prubni tohle : SELECT id, vlastnik, name FROM tabulka WHERE vlastnik = 'JA' GROUP BY id UNION SELECT id, vlastnik, name FROM tabulka WHERE vlastnik != 'JA' AND id NOT IN ( SELECT id FROM tabulka WHERE vlastnik = 'JA' ) ORDER BY name ASC |
||
Dr.No Profil * |
#12 · Zasláno: 8. 4. 2008, 14:52:25
Diky za rychlou reakci.
z te tve tabulky by se vypsala tato: A ano B ne, id=1 uz ma vlastnika "JA" C,D taky ne, id ma vlastnika "JA" u zaznamu CH E,F ne, stejny problem G v tabulce nikdy nebude, protoze je stejne jako A H ano CH ano I ano takze vystup bude: A,H,CH,I, |
||
BetaCam Profil |
#13 · Zasláno: 8. 4. 2008, 14:56:59 · Upravil/a: BetaCam
Dr.No
Diky za rychlou reakci. z te tve tabulky by se vypsala tato: A ano B ne, id=1 uz ma vlastnika "JA" C,D taky ne, id ma vlastnika "JA" u zaznamu CH E,F ne, stejny problem G v tabulce nikdy nebude, protoze je stejne jako A H ano CH ano I ano takze vystup bude: A,H,CH,I, V tom případě vyzkoušej ten SQL dotaz co sem ti napsal jako posledni. Mělo by to být to co ty potřebuješ. A pokud máš jistotu, že v tabulce nikdy nebudeš mít vlastníka 'JA' se stejným ID tak můžeš z toho dotazu smazat i to GROUP BY id |
||
Dr.No Profil * |
#14 · Zasláno: 8. 4. 2008, 15:11:19
Diky moc, uz to dela to, co to ma delat:). jeste jednou diky
|
||
Časová prodleva: 16 let
|
0