[ corelko @ 26.09.2011. 13:31 ] @
[ corelko @ 26.09.2011. 13:31 ] @
[ stex @ 26.09.2011. 14:20 ] @
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. [ corelko @ 26.09.2011. 14:29 ] @
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
[ vatri @ 26.09.2011. 14:51 ] @
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. [ stex @ 26.09.2011. 15:25 ] @
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 } } [ corelko @ 26.09.2011. 15:30 ] @
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. [ corelko @ 26.09.2011. 15:34 ] @
@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? [ stex @ 26.09.2011. 15:49 ] @
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.
[ corelko @ 26.09.2011. 17:10 ] @
Pokusacu vec nesto sa ovim da odradim pa se javljam sta sam uradio. Hvala puno
[ corelko @ 26.09.2011. 21:33 ] @
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. [ corelko @ 26.09.2011. 22:38 ] @
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] [ vatri @ 26.09.2011. 23:57 ] @
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] [ corelko @ 27.09.2011. 14:16 ] @
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. Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|