[ PavleK86 @ 19.12.2011. 11:53 ] @
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
[ bogdan.kecman @ 19.12.2011. 14:09 ] @
(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)

[ PavleK86 @ 19.12.2011. 14:33 ] @
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
[ bogdan.kecman @ 19.12.2011. 14:49 ] @
koncept je generalno los, tj lose ti je organizovana baza ako ovako vadis neke rezultate
[ PavleK86 @ 19.12.2011. 14:53 ] @
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.
[ PavleK86 @ 19.12.2011. 14:57 ] @
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.
[ bogdan.kecman @ 19.12.2011. 15:26 ] @
refactoring .. refactoring .. refactoring ..
[ bantu @ 21.12.2011. 08:48 ] @
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;
[ bogdan.kecman @ 22.12.2011. 02:30 ] @
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]