Ispis iz vise tabela

1

Ispis iz vise tabela

offline
  • Pridružio: 13 Mar 2009
  • Poruke: 229

Pozdrav svima. Imam jedan problem a to je da imam 3 tabele: kategorije, proizvodi, i kategorije_proizvodi u kojoj su spoljni kljucevi iz tabela kategorije i proizvodi. Hocu da napravim kao neku za sastavljanje konfiguracije racunara. Interesuje me kako izvuci podatke iz ove 3 tabele jer ja moram da ponudim kupcu da iz svake kategorije izabere po jedan proizvod i da se tu upise tabelu narudzba. Ovaj upis sad nije toliko bitan koliko je ovo izlistavanje iz ovih tabela. Nekako na svim ovakvim sistemima te narudzbenice su napravljene u vidu select lista. Da li je to moguce i u mom slucaju. Recimo ovako nesto:

<label><strong>Procesor:</strong></label>          <select name="procesor">                         <option value="">Ovde lista svih procesora</option>                         </select>    <label><strong>RAM memorije:</strong></label>          <select name="ram">                         <option value="">Ovde lista svih RAM memorija</option>                         </select>    i tako dalje.

Predpostavljam da ovde treba koristiti one JOIN koje nikad nisam do kraja shvatio Sad Hvala svima unapred



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • C# and PHP Developer
  • Pridružio: 16 Feb 2011
  • Poruke: 1630
  • Gde živiš: Pancevo

Ako oces da ti pomognemo daj strukturu baze podataka, jer te nekapiram kako ti izgleda baza pa da ima neki razlog da se koristi JOIN, spajanje vise tabela...

SELECT * 100% koristis tu nemas druge samo me zanima struktura, ako koristis JOIN onda ces morati prosirivati i menjati bazi...

*Baza Hardver
---Procesori
id[int], [11], [null],[AC]
model [vch]
cena [vch]
---Maticne
id[int], [11], [null],[AC]
model [vch]
cena [vch]
---Graficke
id[int], [11], [null],[AC]
model [vch]
cena [vch]

E ako ti je u ovom slucaju dizajn baze ovakav onda radis LEFT JOIN u zavisnosti sta ce korisnik da izabere iz dorp down liste... Tamo vatas value i vrtis logiku scripte swich, case, break.



offline
  • Pridružio: 13 Mar 2009
  • Poruke: 229

OK.Nije problem. Evo modela baze. Dakle karakteristicne su tabele kategorija, proizvod i kategorija_has_proizvod. Klasika, u kategorija_has_proizovd cuvam samo spoljne kljuceve iz kategorija i proizvodi da se zna koji proizvod pripada kojoj kategoriji. Evo pogledaj pa cemo da diskutujemo. Hvala ti sto se interesujes. Dobro si me podsetio za cenu moracu i to da uglavim, ali necemo ovde sad to da razmatramo posto cu ja da imam jednu stranu gde cu da stampam sve proizvode i njihovu cenu tako da kada korisnik pravi konfiguraciju bira iz liste samo po jedan proizvod iz svake kategorije.Od prilike tako.


offline
  • C# and PHP Developer
  • Pridružio: 16 Feb 2011
  • Poruke: 1630
  • Gde živiš: Pancevo

ok ajde malo teoriski da pojasnim jednostavan nacin bez LEFT JOIN

Pazi ti imas na primer


Evo neki primer kako da dobijes sve modele u option meniju

  <select name="ram">       <?php foreach ($ram as $ime => $cena):?>       <?php echo "<option> $ime['imePoljauBazi']; </option>";?>       <?php endforeach;?> </select>

A sto se tice preuzimanja podataka iz baze tu koristi obican SELECT
Samo vrtis logiku skripte.
Ovde bi mogao da iskoristis swich iskaz za rad sa upitima...
Bitno je da vatas value u option-u i da pomocu njega dolazis do cene..

Ovo je prosto samo sedi uzmi papir i nacrtaj sablon kako ti u glavi to zamisljas da to funkcionise.

Kada izaberes neku stavku iz ram polja tipa "DDR2-sRf21-rp231" ti onda iz baze obicnim selectom ucitavas cenu te stavke i prikazujes je.....

offline
  • Pridružio: 13 Mar 2009
  • Poruke: 229

Hvala na ovome, ali vidi ovako. Meni sad nije potrebna cena jer cu ja imati posebno jednu stranu gde cu da izlistavam sve komponente sa kojima radnja kao raspolaze i njihove cene. Kad korisnik hoce da naruci neku konfiguraciju on ce da ima nesto ovako:

Procesor: <select><option>Svi modeli procesora</option></select>
RAM: <select><option>Svi modeli RAM-a</option></select>

Kako bih sa obicnim SELECT ja mogao da izvucem sve RAM-ove kada podatke o njoj imam u 3 tabele, u "kategororija" mi je samo ime kategorije RAM u proizvodi mi je suma proizvoda izmedju ostalog i RAM a u kategorija_proizovd preko spoljnih kljuceva znam sta mi sve pripada RAM-u, sta Procesoru itd. Kad bi mogao ti meni da napises da izlistam samo recimo RAM-ove lako bih ja kasnije. I jos jedno pitanje, sve ukoliko mognem da izvucem ove podatke samo sa SELECT znaci li to da cu za svaku kategoriju imati po jedan SELECT ili kako?

offline
  • lnenad  Male
  • Stručni saradnik
    Web
  • Nenad
  • Arhitetak
  • Pridružio: 16 Jan 2007
  • Poruke: 2860
  • Gde živiš: Bijeljina

Greska ti je bila u organizovanju same baze, nepotrebno je praviti toliko komplikovanu bazu za male poslove, takve baze se projektuju za ogromne servere koji drze gigabajte podataka. Plus ovako samo ces dzabe koristiti procesor za vadjenje podataka iz dvije tabele.

Ja bih obrisao bazu napravio novu sa fino dvije tabele, proizvodi i kategorije, u proizvode upises ime proizvoda i kategoriju, gdje je kategorija ID broj iz tabele kategorije.

Za primjer ispis procesora uradis select komandu na proizvode where kategorija = 2

u kategorijama imas tabelu sa izgledom

ID naziv_kategorije 1  Graficke kartice 2  Procesori 3  Hard diskovi

Nadam se da si me razumio Smile

offline
  • Pridružio: 13 Mar 2009
  • Poruke: 229

Napisano: 26 Sep 2011 12:50

Pa jesam, znam ja dobro sta ti govoris Very Happy Napravio sam bazu koja se koristi u praksi pa sam mislio onako uz pomoc foruma i ljudi koji su iskusni da naucim nesto vise i da malo odmaknem od ovih skolskih primera.
Nenade i u tom slucaju ces morati da vadis podatke iz 2 tabele Very Happy Opet moras da koristis JOIN.

Dopuna: 26 Sep 2011 14:09

@Nenad mozda si mislio na ovo:
Ako imam 2 tabele kategorije i proizvodi ovako organizovane:

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

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

E sad ako hocu da izlistam sve Procesore:

SELECT proizvodi.nazivProiz FROM proizvodi WHERE proizvodi.idKat = kategorije.idKat

Sa ovim bi trebao da izlistam sve proizvode ako se ne varam ?

offline
  • lnenad  Male
  • Stručni saradnik
    Web
  • Nenad
  • Arhitetak
  • Pridružio: 16 Jan 2007
  • Poruke: 2860
  • Gde živiš: Bijeljina

Bravo, to sam mislio, nema potrebe za join Wink

Samo sto
SELECT proizvodi.nazivProiz FROM proizvodi WHERE proizvodi.idKat = kategorije.idKat

kategorije.idKat nema veze sa time i nije mu mjesto u query-ju, nego ti upises tu 1/2/3/4 u zavisnosti od onoga sto treba da prikazes.

I nema potrebe da pises proizvodi.imekolone ako radis sa samo jednom tabelom, dovljno je samo ime kolone Smile

offline
  • Pridružio: 13 Mar 2009
  • Poruke: 229

Mislis ako zelim da izlistam sve procesore :
SELECT nazivProiz FROM proizvodi WHERE idKat = 1

I kada se pojavi nova kategorija sedi i placi Very Happy U tom slucaju moram da prepravljam kod.

offline
  • lnenad  Male
  • Stručni saradnik
    Web
  • Nenad
  • Arhitetak
  • Pridružio: 16 Jan 2007
  • Poruke: 2860
  • Gde živiš: Bijeljina

Da, ali posto ti dodajes novu kategoriju, mozesnapravis jednostavan admin panel u kome pise koja kategorija ima koji id.

Ili kada korisnik bira kategorije mozes jednostavno da automatizujes proces koristeci php+html, a ne da rucno ispisujes padajuci meni.

<select> while($rezultat = mysql_fetch_array($query_result)) { echo '   <option value="'.$rezultat['idKat'].'">'.$rezultat['nazivKat'].'</option>'; } </select>

Sto ce proizvesti padajuci meni koji ce imati sve kategorije sa njihovim natpisima, ALI kada se forma submituje slace podatke koristeci id kategorija, koje uzimas preko $_GET i $_POST i prosledjujes u query

SELECT nazivProiz FROM proizvodi WHERE idKat = '.$_GET['idKat'].'

Momcino ne mogu ti ja sve objasniti istrazuj malo Wink

Ko je trenutno na forumu
 

Ukupno su 1310 korisnika na forumu :: 33 registrovanih, 4 sakrivenih i 1273 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: 9k38, amaterSRB, bojank, bojcistv, bokisha253, CikaKURE, dekir, Djordjevic, DonRumataEstorski, dragoljub11987, drimer, Excalibur13, Georgius, hyla, ikan, janbo, Kibice, Kubovac, kuntalo, Lazarus, Leonov, Mcdado, milenko crazy north, Milometer, Milos ZA, milutin134, novator, sasa87, Skywhaler, Srle993, Toper, Trpe Grozni, Vlada1389