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

kako da izvucem podatke iz tri tabele koje nemaju jednak broj zapisa

[es] :: MySQL :: kako da izvucem podatke iz tri tabele koje nemaju jednak broj zapisa

[ Pregleda: 3070 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

vladimirn
Vladimir Nikolic
Novi Sad

Član broj: 38585
Poruke: 81
*.static.sbb.co.yu.



Profil

icon kako da izvucem podatke iz tri tabele koje nemaju jednak broj zapisa13.04.2007. u 10:35 - pre 206 meseci
U bazi imam tri tabele

gradovi
polja: id, naziv

regioni
polja: id, naziv


tip_smestaja
polja: id, naziv


potrebno mi je da izvucem sve id i sve nazive u jednom upitu. Probao sam sa left join, right join, i inner join

Code:

SELECT t.id as smestajid, t.naziv as smestajnaziv, g.id as gradid, g.naziv as gradnaziv FROM tip_smestaja t left join gradovi g on t.id = g.id group by t.id


Ovo je primer sa dve tabele i dobijem rezultat ali u tom rezultatu dobijam samo onoliko redova koliko ima u jednoj tabeli, pa ako u tabeli tip_smestaja imam 8 recorda a u tabeli gradovi imam 7 recorda, dobijem 8 rezultata, stim da mi je zadnji record iz tabele gradovi NULL. ukoliko u tabeli gradovi imam 9 recorda, prikaze mi se samo 8 rezultata, a trebalo bi mi svih 9.

Sa tri tabele nisam dobio nista. u trecoj tabeli (regioni) uneo sam samo 2 rekorda, i onda kada sam to nekako pokusao da join ili da union ili bilo sta, dobio bih rezultate koji s eponavljaju onoliko puta koliko ima rekorda. Ne znam sta da radim.
Molim za pomoc, pa ako nisam dobro objasnio pokusacu ponovo da objasnim.
 
Odgovor na temu

chachka
Srđan Mijatov
Programer
BUS Computers
Kikinda

Član broj: 53780
Poruke: 576
85.222.162.*

Sajt: www.baze-podataka.net


+4 Profil

icon Re: kako da izvucem podatke iz tri tabele koje nemaju jednak broj zapisa13.04.2007. u 12:20 - pre 206 meseci
Znaci ako imamo tabele
Code:

CREATE TABLE gradovi (
  id CHAR(5) NOT NULL PRIMARY KEY,
  naziv VARCHAR(30) NOT NULL);

CREATE TABLE regioni (
  id CHAR(5) NOT NULL PRIMARY KEY,
  naziv VARCHAR(30) NOT NULL);

CREATE TABLE tip_smestaja (
  id CHAR(5) NOT NULL PRIMARY KEY,
  naziv VARCHAR(30) NOT NULL);

onda je resenje:
Code:

SELECT MAX(CASE WHEN z.tip = 'G'
                THEN z.naziv
                ELSE NULL
            END) AS grad,
       MAX(CASE WHEN z.tip = 'R'
                THEN z.naziv
                ELSE NULL
            END) AS regioni,
       MAX(CASE WHEN z.tip = 'S'
                THEN z.naziv
                ELSE NULL
            END) AS tip_smestaja
  FROM (SELECT 'G' AS tip, g1.id AS id, g1.naziv AS naziv, COUNT(g2.id) AS rbr
          FROM gradovi AS g1
               INNER JOIN
               gradovi AS g2
                 ON g1.id >= g2.id
         GROUP BY g1.id, g1.naziv
         UNION ALL
        SELECT 'R' AS tip, r1.id AS id, r1.naziv AS naziv, COUNT(r2.id) AS rbr
          FROM regioni AS r1
               INNER JOIN
               regioni AS r2
                 ON r1.id >= r2.id
         GROUP BY r1.id, r1.naziv
         UNION ALL
        SELECT 'S' AS tip, s1.id AS id, s1.naziv AS naziv, COUNT(s2.id) AS rbr
          FROM tip_smestaja AS s1
               INNER JOIN
               tip_smestaja AS s2
                 ON s1.id >= s2.id
         GROUP BY s1.id, s1.naziv
       ) AS z
 GROUP BY z.id, z.rbr
 ORDER BY z.rbr

"The best code is no code at all."
- Zidar (ES član)
"Biggest obstacle to learning
SQL is unlearning procedural
programming."
- Joe
Celko
"Minimize code, maximize data."
- A. Neil Pappalardo
 
Odgovor na temu

vladimirn
Vladimir Nikolic
Novi Sad

Član broj: 38585
Poruke: 81
*.static.sbb.co.yu.



Profil

icon Re: kako da izvucem podatke iz tri tabele koje nemaju jednak broj zapisa13.04.2007. u 12:35 - pre 206 meseci
hvala do neba! dobio sam rezultat u mysql sada da to prenesem u array u php i onda mogu da nastavim. puno ti hvala ;))
 
Odgovor na temu

vladimirn
Vladimir Nikolic
Novi Sad

Član broj: 38585
Poruke: 81
*.static.sbb.co.yu.



Profil

icon Re: kako da izvucem podatke iz tri tabele koje nemaju jednak broj zapisa13.04.2007. u 12:40 - pre 206 meseci
ah nije gotovo :(
da li mi mozes pomoci da izvucem i gradid, tipsmestajaid i regionid?
 
Odgovor na temu

chachka
Srđan Mijatov
Programer
BUS Computers
Kikinda

Član broj: 53780
Poruke: 576
85.222.162.*

Sajt: www.baze-podataka.net


+4 Profil

icon Re: kako da izvucem podatke iz tri tabele koje nemaju jednak broj zapisa13.04.2007. u 12:58 - pre 206 meseci
Znam :) , ali to bi barem sada trebalo da bude lako. Pokusaj.

Napomena: Ako je id integer i ako ne postoje rupe u id-jevima, onda se upit moze uraditi bez kolone 'rbr' (nemoraju se INNER JOIN-ovati tabele same sa sobom), gde ce ulogu kolone 'rbr' zameniti kolona 'id'.
"The best code is no code at all."
- Zidar (ES član)
"Biggest obstacle to learning
SQL is unlearning procedural
programming."
- Joe
Celko
"Minimize code, maximize data."
- A. Neil Pappalardo
 
Odgovor na temu

chachka
Srđan Mijatov
Programer
BUS Computers
Kikinda

Član broj: 53780
Poruke: 576
*.ADSL.neobee.net.

Sajt: www.baze-podataka.net


+4 Profil

icon Re: kako da izvucem podatke iz tri tabele koje nemaju jednak broj zapisa14.04.2007. u 21:00 - pre 206 meseci
Proslo je vise od jednog dana, pa evo i kompletnog resenja:
Code:

SELECT MAX(CASE WHEN z.tip = 'G'
                THEN z.id
                ELSE NULL
            END) AS sifra_grada,
       MAX(CASE WHEN z.tip = 'G'
                THEN z.naziv
                ELSE NULL
            END) AS ime_grada,
       MAX(CASE WHEN z.tip = 'R'
                THEN z.id
                ELSE NULL
            END) AS sifra_regiona,
       MAX(CASE WHEN z.tip = 'R'
                THEN z.naziv
                ELSE NULL
            END) AS ime_regiona,
       MAX(CASE WHEN z.tip = 'S'
                THEN z.id
                ELSE NULL
            END) AS tip_smestaja,
       MAX(CASE WHEN z.tip = 'S'
                THEN z.naziv
                ELSE NULL
            END) AS ime_smestaja
  FROM (SELECT 'G' AS tip, g1.id AS id, g1.naziv AS naziv, COUNT(g2.id) AS rbr
          FROM gradovi AS g1
               INNER JOIN
               gradovi AS g2
                 ON g1.id >= g2.id
         GROUP BY g1.id, g1.naziv
         UNION ALL
        SELECT 'R' AS tip, r1.id AS id, r1.naziv AS naziv, COUNT(r2.id) AS rbr
          FROM regioni AS r1
               INNER JOIN
               regioni AS r2
                 ON r1.id >= r2.id
         GROUP BY r1.id, r1.naziv
         UNION ALL
        SELECT 'S' AS tip, s1.id AS id, s1.naziv AS naziv, COUNT(s2.id) AS rbr
          FROM tip_smestaja AS s1
               INNER JOIN
               tip_smestaja AS s2
                 ON s1.id >= s2.id
         GROUP BY s1.id, s1.naziv
       ) AS z
 GROUP BY z.id, z.rbr
 ORDER BY z.rbr

Ako hocete nesto da naucite iz gornjeg upita pokrenite zasebno podupit:
Code:

SELECT 'G' AS tip, g1.id AS id, g1.naziv AS naziv, COUNT(g2.id) AS rbr
  FROM gradovi AS g1
       INNER JOIN
       gradovi AS g2
         ON g1.id >= g2.id
 GROUP BY g1.id, g1.naziv
 UNION ALL
SELECT 'R' AS tip, r1.id AS id, r1.naziv AS naziv, COUNT(r2.id) AS rbr
  FROM regioni AS r1
       INNER JOIN
       regioni AS r2
         ON r1.id >= r2.id
 GROUP BY r1.id, r1.naziv
 UNION ALL
SELECT 'S' AS tip, s1.id AS id, s1.naziv AS naziv, COUNT(s2.id) AS rbr
  FROM tip_smestaja AS s1
       INNER JOIN
       tip_smestaja AS s2
         ON s1.id >= s2.id
  GROUP BY s1.id, s1.naziv

Kao rezultat smo dobili skup svih gradova, regiona i tipova smestaja. Ovaj skup pored osnovnih informacija sadrzi i informaciju o poreklu (G, R ili S) kao i redni broj numerisan po poreklu.

Spoljni upit grupise ovu pomocnu tabelu i razdvaja njene kolone na vise kolona (CASE deo) u zavisnosti od porekla.

MAX jednostavno uklanja pocetne NULL-ove svake kolone.


[Ovu poruku je menjao chachka dana 15.04.2007. u 10:58 GMT+1]
"The best code is no code at all."
- Zidar (ES član)
"Biggest obstacle to learning
SQL is unlearning procedural
programming."
- Joe
Celko
"Minimize code, maximize data."
- A. Neil Pappalardo
 
Odgovor na temu

vladimirn
Vladimir Nikolic
Novi Sad

Član broj: 38585
Poruke: 81
*.static.sbb.co.yu.



Profil

icon Re: kako da izvucem podatke iz tri tabele koje nemaju jednak broj zapisa18.04.2007. u 10:24 - pre 206 meseci
Izvinjavam se zbog kasnog odgovora, ali zelim da ti zahvalim, naucio sam ponsto rekao bih i razjasnio sebi neke stvari. Hvala ti na pomoci, pozdrav :)
 
Odgovor na temu

[es] :: MySQL :: kako da izvucem podatke iz tri tabele koje nemaju jednak broj zapisa

[ Pregleda: 3070 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

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