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

Uzimanje podataka iz 3 tabele

[es] :: PHP :: Uzimanje podataka iz 3 tabele

[ Pregleda: 2452 | Odgovora: 12 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

corelko

Član broj: 165571
Poruke: 92
*.teol.net.



+6 Profil

icon Uzimanje podataka iz 3 tabele26.09.2011. u 13:31 - pre 153 meseci
Pozdrav svima. Izmodelovao sam bazu za neku kao prodavnicu racunara. Dosta mi je pomogao Bogdan sa foruma i radili smo u tom smeru da postujemo normalizaciju. Problem je sledeci. Imam 3 tabele: kategorija, proizvod i kategorija_proizvod.

U kategorija imam nesto ovako:
Code:

idKat   nazivKat
1        Procesor
2        RAM
3        HDD
4        Monitor
5        Napajanje


U proizvodi ovo:
Code:

idProiz  nazivProiz                    
1          Intel core 2 duo              
2          Intel Celeron 2,6GHz       
3          Intel Pentium 4               
4          Kingston 2GB                  
5          Kingston 1GB                  
6          Monitor Samsung          


A u kategorija_proizvod spoljne kljuceve iz kategorija i proizvod:
Code:

idKat    IdProiz
1         1
1         2
1         3
2         4
2         5
4         6


E sad ja trebam da korisniku aplikacije treba da omogucim da on izabere neku konfikuraciju za svoj racunar. Video sam da se to skoro svugde radi sa onim select listama i kako iz ove 3 tabele doci do proizvoda iz odredjene kategorije. Da bude jasnije evo sta bih zelio:

Code:

<label>Procesor:</label> <select name="procesor">
                                  <option value="">Ovde lista svih procesora</option>
                                  </select>   

<label>RAM memorije:</label> <select name="ram">
                                         <option value="">Ovde lista svih RAM memorija</option>
                                         </select>   

<label>Monitori:</label> <select name="monitori">
                                         <option value="">Ovde lista svih monitora</option>
                                         </select>   

i tako dalje. 


Znam da bi ovde trebalo koristiti i JOIN radi spajanja vise tabela ali ovo meni deluje mnogo komplikovano jer ucim. Recimo da imam 2 tabele kategorija i proizvodi i u proizvodima spoljni kljuc iz kategorije ja bih se snasao nekako al u ovom primeru nema sanse. Ako bi neko hteo da pomogne bio bih mu zahvalan. Takodje sam prilozio model baze da bude jasnije
Prikačeni fajlovi
 
Odgovor na temu

stex

Član broj: 718
Poruke: 374
*.adsl.absolutok.net.

Sajt: stivi.on.neobee.net


+21 Profil

icon Re: Uzimanje podataka iz 3 tabele26.09.2011. u 14:20 - pre 153 meseci
Za recimo procesore:
SELECT b.idProiz, b.nazivProiz FROM kategorija_proizvodi AS a LEFT JOIN proizvodi AS b ON a.idProiz=b.idProiz WHERE a.idKat = 1

Ovo sam napamet napisao.

A sto u tabeli prozivodi nisi stavio polje idKat? Nisi morao posebnu tabelu, osim ako jedan proizvod ne ide u vise kategorija.
stivi.on.neobee.net
 
Odgovor na temu

corelko

Član broj: 165571
Poruke: 92
*.teol.net.



+6 Profil

icon Re: Uzimanje podataka iz 3 tabele26.09.2011. u 14:29 - pre 153 meseci
Pa eto moze se desiti da proizvod moze pripadati u vise kategorija zato je tebala jos jedna tabela i tako kazu strucnjaci. Ja sam i krenuo tim putem sa 2 tabele gde u proizvodima imam id_kategorije i to je to ali su me upozorili da se tako ne radi. U ovom tvom slucaju cini mi se da bi ovu kategoriju zakovao u kod i kad se pojavi nova mora rucno da se dodaje svaki put. Nisam siguran ali nesto mi se cini. Valjda ce se javiti neko ko vlada ovime da pomogne. Hvala ti u svakom slucaju
 
Odgovor na temu

vatri
Banja Luka, RS

Član broj: 68697
Poruke: 1006
*.static.stelkom.net.



+18 Profil

icon Re: Uzimanje podataka iz 3 tabele26.09.2011. u 14:51 - pre 153 meseci
Nadam se da je ovo odg. na tvoje pitanje:

Code:


select proizvod.naziv FROM proizvod

JOIN kategorija ON
      kategorija.idKat = '1' # umjesto 1 stavi $id_kat 

JOIN kategorija_proizvod ON
      kategorija_proizvod.idKat = kategorija.idKat 
      AND kategorija_proizvod.idProiz = proizvod.idProiz;



Predlazem ti da naucis JOIN , trebace ti cesto, a nije toliko tesko nauciti.
 
Odgovor na temu

stex

Član broj: 718
Poruke: 374
*.dynamic.sbb.rs.

Sajt: stivi.on.neobee.net


+21 Profil

icon Re: Uzimanje podataka iz 3 tabele26.09.2011. u 15:25 - pre 153 meseci
Ja sam mislio da ti je JOIN problem i da znas sta ces dalje. Pa samo taj sql sto sam ti napisao stavis u petlju. Recimo:

$kat = mysql_query("SELECT * FROM kategorija");
while($row = mysql_fetch_assoc($kat)){
$q = mysql_query("SELECT b.idProiz, b.nazivProiz FROM kategorija_proizvodi AS a LEFT JOIN proizvodi AS b ON a.idProiz=b.idProiz WHERE a.idKat =". $row["idkat"]);
while($pro = mysql_fetch_assoc($q)){
//ovde generises select, samo pazi koje ce ti biti ime selecta

}
}


stivi.on.neobee.net
 
Odgovor na temu

corelko

Član broj: 165571
Poruke: 92
*.teol.net.



+6 Profil

icon Re: Uzimanje podataka iz 3 tabele26.09.2011. u 15:30 - pre 153 meseci
Shvatam ja JOIN donekle. Recimo ovako, ovde si zatrazio sve proizvode iz tabele proizvodi pa si upitu pridruzio jos i tabelu sa kategorijama i rekao da ti trebaju proizvodi iz one kategorije gde je idKat=1 a to su procesori a da bi upit znao koji su to proizvodi morao si da pridruzis i tabelu kategorija_proizovd i rekao da su to svi oni proizvodi ciji ciji kljucevi iz tabele kategorija_proizvod odgovaraju onim kljucevima iz kategorije i proizvoda. Cemu onda ovo:
Code:
JOIN kategorija ON kategorija.idKat = '1' # umjesto 1 stavi $id_kat 


kada si rekao da su to oni proizvodi koji odgovaraju ovome:
Code:
 kategorija_proizvod.idKat = kategorija.idKat 


ili je u tome sustina sto on ne zna sta znaci kategorija.idKat sto mu ne pridruzis tabelu prethodno.

Imam jos jedno pitanje ako stavim da mi je idKat=1 onda bi to samo vazilo za procesore. Mene najvise zbunjuje to sto treba da ovo uglavim u ovu moju select listu.
 
Odgovor na temu

corelko

Član broj: 165571
Poruke: 92
*.teol.net.



+6 Profil

icon Re: Uzimanje podataka iz 3 tabele26.09.2011. u 15:34 - pre 153 meseci
@stex
Ovo mi se cini kao da sam blizu resenja. Jos jedno pitanje: Da li umesto ovog a i b moram da stavim imena tabela?
 
Odgovor na temu

stex

Član broj: 718
Poruke: 374
*.dynamic.sbb.rs.

Sajt: stivi.on.neobee.net


+21 Profil

icon Re: Uzimanje podataka iz 3 tabele26.09.2011. u 15:49 - pre 153 meseci
Umesto a i b mozes da stavi sta god hoces. A mozes i bez toga ali onda bi morao da kucas pored svakog polja i naziv tabele. Recimo SELECT proizvodi.idProiz, proizvodi.nazivProzivoda FROM prozivodi LEFT JOIN...itd , a ovako ti je krace. To je samo kad imas vise tabela u selektu.

stivi.on.neobee.net
 
Odgovor na temu

corelko

Član broj: 165571
Poruke: 92
*.teol.net.



+6 Profil

icon Re: Uzimanje podataka iz 3 tabele26.09.2011. u 17:10 - pre 153 meseci
Pokusacu vec nesto sa ovim da odradim pa se javljam sta sam uradio. Hvala puno
 
Odgovor na temu

corelko

Član broj: 165571
Poruke: 92
*.teol.net.



+6 Profil

icon Re: Uzimanje podataka iz 3 tabele26.09.2011. u 21:33 - pre 153 meseci

Code:
SELECT b.idProizvod, b.naziv_proizvoda FROM kategorija_proizvod AS a LEFT JOIN proizvod AS b ON a.idProizvod=b.idProizvod WHERE a.idKategorija = 1


Ovaj upit ne moze da se izvrsi. Poruka o gresci:

Code:
#1054 - Unknown column 'a.idKategorija' in 'where clause'


Ja sam samo prepravio nazive kljuceva jer se tako zovu u bazi, a vide se i iz modela.
 
Odgovor na temu

corelko

Član broj: 165571
Poruke: 92
*.teol.net.



+6 Profil

icon Re: Uzimanje podataka iz 3 tabele26.09.2011. u 22:38 - pre 153 meseci
Code:

select proizvod.naziv_proizvoda FROM proizvod

JOIN kategorija ON
      kategorija.idKategorija = 1

JOIN kategorija_proizvod ON
      kategorija_proizvod.Kategorija_idKategorija = kategorija.idKategorija 
      AND kategorija_proizvod.Proizvod_idProizvod = proizvod.idProizvod


Ovaj upit je dobar i zaista vrati sve proizvode koji pripadaju kategoriji ciji je idKategorija = 1 . E sad treba nekako da ovo organuizujem u moju listu. Moja neka ideja je kada izlistam sve kategorije pohvatam i njihove id-ove kao sto je neko gore predlozio i onda sa switch-case lagano. Hvala na ovom upitu vatri





[Ovu poruku je menjao corelko dana 26.09.2011. u 23:56 GMT+1]
 
Odgovor na temu

vatri
Banja Luka, RS

Član broj: 68697
Poruke: 1006
*.dynamic.t-2.net.



+18 Profil

icon Re: Uzimanje podataka iz 3 tabele26.09.2011. u 23:57 - pre 153 meseci
Evo tek sad sam procitao sta ti u stvari trebas. Evo kod koji ce ti ispisati selekte koje ti zelis.
Naravno malo popravi kod ako budes "kacio" na produkciju: dodaj koji if za provjeru i tako te fore...


Code (php):

/**
*  Uzimamo podatke iz baze:
**/

$q = "select distinct
         k.naziv as kategorija, k.idKat,
         p.naziv as proizvod, p.idProiz
      FROM proizvod p
          JOIN kategorija_proizvod kp ON    kp.idProizv = p.idProiz
          JOIN kategorija k ON k.idKat = kp.idKat AND kp.idProizv = p.idProiz; "
;

$res = mysql_query($q) or die('error #1');

$arrKat = array();

if( mysql_num_rows($res))
{
   while($row = mysql_fetch_array($res))
   {
     // sacuvamo podatke u varijable
     $naziv_kategorija = $row['kategorija'];
     $idKat = $row['idKat'];
     $naziv_proizvoda = $row['proizvod'];
     $idPro = $row['idProiz'];
     
     // napunimo niz (array)
     $arrKat[$idKat]['naziv'] = $naziv_kategorija;
     $arrKat[$idKat]['items'][$idPro] = $naziv_proizvoda;
   }
}

/**
* Ispisuujemo podatke po zelji:
**/


//DEBUG: ovo odkomentiraj da vidis kako izgleda $arrKat  !
//echo '<pre>';print_r($arrKat);echo '</pre>';

foreach($arrKat as $katid => $arrData)
{
     $naziv = $arrData['naziv'];
     $nazivHTML = strtolower( str_replace(' ', '_',$naziv));// pretvorimo u mala slova i zamjenimo SPACE sa _
     $arrProd =  $arrData['items'];
     
     echo "<label>$naziv</label>";
     echo "<select name='$nazivHTML'>";
     foreach($arrProd as $idPro => $proNaziv)
     {
          echo "<option value='$idPro'>$proNaziv</option>";
     }
     echo "</select>";
}
 




[Ovu poruku je menjao vatri dana 27.09.2011. u 01:09 GMT+1]
 
Odgovor na temu

corelko

Član broj: 165571
Poruke: 92
*.teol.net.



+6 Profil

icon Re: Uzimanje podataka iz 3 tabele27.09.2011. u 14:16 - pre 153 meseci
Vatri hvala ti puno. Svakako ce mi ovo koristiti. Evo kako sam ja uz pomoc drugara i onog tvog upita odradili posao sa funkcijom pa mozda nekom jos zatreba:


Code:

function lista($naziv) 
{
    $lista = "";
            $upit = 'SELECT proizvod.idProizvod, proizvod.naziv_proizvoda, kategorija.naziv_kategorije
                FROM proizvod
                JOIN kategorija ON kategorija.idKategorija = ( 
                SELECT kategorija.idKategorija
                FROM kategorija
                WHERE kategorija.naziv_kategorije =  "'.$naziv.'" ) 
                JOIN kategorija_proizvod ON kategorija_proizvod.Kategorija_idKategorija = kategorija.idKategorija
                AND kategorija_proizvod.Proizvod_idProizvod = proizvod.idProizvod';
    $s = mysql_query($upit) or die(mysql_error());
    $br_redovaUbazi = mysql_affected_rows();
        $i = 0;
    $lista = '<div class="form_row"><label class="contact"><strong>'.$naziv.'<strong>
</label><select name="'.$naziv.'"><option value="-1">Odaberite</option>';
    while ( $red = mysql_fetch_assoc($s) )
    { 
                                    
    $lista .= '<option value="'.$red['idProizvod'].'">'.$red['naziv_proizvoda'].'</option>';
    $i++;
    }
                                
    echo $lista .= '</select></div>'; 
}

echo lista("Procesor").' '.lista("Maticna ploca").' '.lista("Monitor").' 
'.lista("Hard disk").' '.lista("RAM").' '.lista("Graficka karta").' 
'.lista("Napajanje").' '.lista("Tastatura").' '.lista("Mis").' '.lista("Opticki uredjaj");
echo '</div><div class="form_row"><input type="submit" name="submit" value="Naruci konfiguraciju! ">
</div></form>';


Ovo radi fino a dobro je sto je funkcija jer cu morati da koristim ovaj kod na jos mesta. E sad se javlja drugi problem. Ako pogledate model videcete zavisnost narudzbe od korisnika dakle u tabelu narudzba smestim idNaruzbe i naziv_narudzbe. To je lako kad sabmitujem formu id je auto_increment a naziv mogu da stavim da je neki random,nebitno. Zbog osobine veze nastala je tabela korisnik_narudzba idKorisnik imam u sesiji a idNarudzba mogu da saznam funkcijom mysql_insert_id(); i to strpam u tabelu korisnik_narudzba. Problem mi je ova treca tabela narudzba_proizovd. idNaruzbe imam ali znam kako da sve selektovane proizvode tj njihove id-ove upisem u tabelu tj da bi se znalo koji sve proizvodi pripadaju jednoj od naruzbi. Da li da ih pokupim u neki niz i onda jedan po jedan smestam u tabelu ili kako?Hvala jos jednom na dosadasnjoj pomoci.

 
Odgovor na temu

[es] :: PHP :: Uzimanje podataka iz 3 tabele

[ Pregleda: 2452 | Odgovora: 12 ] > FB > Twit

Postavi temu Odgovori

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