Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Problem sa upitom

[es] :: MySQL :: Problem sa upitom

[ Pregleda: 1728 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

PavleK86
Pale

Član broj: 127034
Poruke: 34



Profil

icon Problem sa upitom19.12.2011. u 11:53 - pre 150 meseci
Pozdrav svima.

Problem je sljedeci:

Recimo da postoje dvije tabele. Primjer zapisa prve tabele je:

|___id___|___id1___|___id2___|

|___1___|___3_____|___5____|

|___2___|___4_____|___6___|

dakle u njoj su upisani kljucevi iz druge tabele. Kao neki zapis šta je od čega napravljeno.

Primjer zapisa druge tabele je:

|__id__|___opis____|

|__1__|____sub1___|

|__2__|____sub2___|

|__3__|____sub3___|

|__4__|____sub4___|

|__5__|____sub5___|

|__6__|____sub6___|

Ono što upit treba da vrati jeste:

|_opis_|_opis1_|_opis2_|

|_sub1_|_sub3_|_sub5_|

|_sub2_|_sub4_|_sub6_|

dakle, da u tri kolone povuce vrijednost kljuceva iz iste tabele.

Sve sam pokušao, ali nemam nikakvu ideju kako ovo da riješim.

Unaprijed zahvalan,
Pavle
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Problem sa upitom19.12.2011. u 14:09 - pre 150 meseci
(ovaj deo si ti trebao da napises:)
Code:

mysql> create table t1 (id int, id1 int, id2 int) engine=myisam;
Query OK, 0 rows affected (0.01 sec)

mysql> insert into t1 values (1,3,5), (2,4,6);
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> create table t2 (id int, opis char(10)) engine=myisam;
Query OK, 0 rows affected (0.03 sec)

mysql> insert into t2 values (1, 's1'), (2, 's2'), (3, 's3'), (4, 's4'), (5, 's5'), (6, 's6');
Query OK, 6 rows affected (0.00 sec)
Records: 6  Duplicates: 0  Warnings: 0


i onda upit:

Code:

mysql> select (select opis from t2 where t2.id = t1.id) as opis, (select opis from t2 where t2.id = t1.id1) as opis1, (select opis from t2 where t2.id = t1.id2) as opis2 from t1;
+------+-------+-------+
| opis | opis1 | opis2 |
+------+-------+-------+
| s1   | s3    | s5    |
| s2   | s4    | s6    |
+------+-------+-------+
2 rows in set (0.01 sec)


 
Odgovor na temu

PavleK86
Pale

Član broj: 127034
Poruke: 34



Profil

icon Re: Problem sa upitom19.12.2011. u 14:33 - pre 150 meseci
Bogdane, hvala ti mnogo!
Ovakav sam upit i ja imao, ali mi nije davao rezultat, vjerovatno da sam napravio negdje gresku, posto je konkretni sistem dosta komplikovaniji.
Pokusacu ponovo.

Jos jednom hvala.
Pozdrav
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Problem sa upitom19.12.2011. u 14:49 - pre 150 meseci
koncept je generalno los, tj lose ti je organizovana baza ako ovako vadis neke rezultate
 
Odgovor na temu

PavleK86
Pale

Član broj: 127034
Poruke: 34



Profil

icon Re: Problem sa upitom19.12.2011. u 14:53 - pre 150 meseci
Shvatio sam u cemu je problem.

Moj upit je bio tipa:

select (select opis from t1, t2 where t2.id = t1.id) as opis, (select opis from t1, t2 where t2.id = t1.id1) as opis1, (select opis from t1, t2 where t2.id = t1.id2) as opis2 from t1;

Samo je trebalo izbaciti iz podupita t1.
 
Odgovor na temu

PavleK86
Pale

Član broj: 127034
Poruke: 34



Profil

icon Re: Problem sa upitom19.12.2011. u 14:57 - pre 150 meseci
Baza je davno projektovana, a ja sam 4. koji radi na njoj. Ali kako sistem nije zavrsen, onda se samo dodaju nove tabele.
Jednom kad bude gotov, vjerovatno ce trebati ponovo razviti bazu.
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Problem sa upitom19.12.2011. u 15:26 - pre 150 meseci
refactoring .. refactoring .. refactoring ..
 
Odgovor na temu

bantu

Član broj: 38670
Poruke: 305
89.111.240.*



+27 Profil

icon Re: Problem sa upitom21.12.2011. u 08:48 - pre 150 meseci
E, a šta mislite o ovom riješenju? Da li je možda bolje?

Code:

select o1.opis as opis, o2.opis as opis1, o3.opis as opis2 
from t1, t2 o1, t2 o2, t2 o3
where t1.id=o1.id
and t1.id1=o2.id
and t1.id2=o3.id;
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
95.180.61.*

Sajt: mysql.rs


+2377 Profil

icon Re: Problem sa upitom22.12.2011. u 02:30 - pre 150 meseci
da, mnogo je preglednije! mozda cak i dosta bolje, u stvari, 100 puta bolje :D .. zavisi kakav je krajnji upit (join buffer moze da ubrza stvar, optimizer sa ovim subupitima nece da koristi join optimizer iako ce da pravi identican path kroz mysql, bar na 5.6, nisam probao na 5.5)

[Ovu poruku je menjao bogdan.kecman dana 22.12.2011. u 16:41 GMT+1]
 
Odgovor na temu

[es] :: MySQL :: Problem sa upitom

[ Pregleda: 1728 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.