Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 8 odgovora
  • 2.630 pregleda

Najnovija ↓

Problem sa upitom 19.12.2011. u 12:53 · pre 181 mesec #1
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
Re: Problem sa upitom 19.12.2011. u 15:09 · pre 181 mesec #2
(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)

Potpis
arhimed
http://www.mysql.rs/ | http://elco.crsndoo.com/
Re: Problem sa upitom 19.12.2011. u 15:33 · pre 181 mesec #3
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
Re: Problem sa upitom 19.12.2011. u 15:53 · pre 181 mesec #5
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.
Re: Problem sa upitom 19.12.2011. u 15:57 · pre 181 mesec #6
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.
Re: Problem sa upitom 21.12.2011. u 09:48 · pre 180 meseci #8
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;
Re: Problem sa upitom 22.12.2011. u 03:30 · pre 180 meseci
izmenjeno 1 put, poslednji put bogdan.kecman 22.12.2011. u 16:41
  1. bogdan.kecman22.12.2011. u 16:41zapis iz teksta poruke
#9
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)
Potpis
arhimed
http://www.mysql.rs/ | http://elco.crsndoo.com/
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme