[ avayaman @ 05.12.2009. 22:45 ] @
Evo mog problema, za iskusnog develop-ra piece of cake, za mene "mrtva tačka".

Pravim bazu u koju ću smeštati prodavce i brendove koje oni prodaju.

Primer:
prodavac1 -> adidas, reebok,nike, levis, diesel, timberland,hilfiger.
prodavac2 -> police.
prodavac3 -> adidas, casio, arena, gillette, astor,
prodavac4 ->reebok, nike,timberland, speedo, bata.

Selektovanje brenda/brendova se vrši <select multiple name="brand" action="akcija.php" > formom, dakle u slučaju više selektovanih brendova $_GET['brand'] je array.

Potrebno mi je jednostavno ispisivanje prodavaca(tj. njihovih podataka) iz MySQL baze na osnovu selektovanog/selektovanih brenda/brendova.

Primer:
selektujem adidas, kliknem submit, dobijem ispis: prodavac1, prodavac2.
selektujem casio, kliknem submit, dobijem ispis: prodavac3.

Kreirao sam dve tabele. U jednoj se nalaze prodavci i njihovi podaci, u drugoj su svi brendovi(njih oko 60) i id-jevi svakog brenda. Ono što ne znam je sintaksa koju treba da upotrebim kako bih ovo ostvario.

Dakle potreban mi je kod na stranici akcija.php, tj. mysql_query("SELECT ... ") ...

Naravno ako nisam dobro započeo i postavio dobar koncept, rado ću promeniti stvari. Trenutno sam na "mrtvoj tački" pa bi se valjalo pomeriti :)

Hvala unapred !

[ bogdan.kecman @ 06.12.2009. 04:29 ] @
bez toga kako ti tacno izgleda baza ne moze niko da ti pomogne sa sql upitom .... sto se organizacije same baze tice .. pocni odavde:
http://www.mysql.rs/2009/05/mo...e-baze-podataka-normalizacija/

[ avayaman @ 06.12.2009. 13:28 ] @

Sjajan blog, odlično štivo, hvala puno Bogdane!

Upravo ovako ću napraviti tabele, jer je to ono što meni treba, pa molim za dalju asistenciju.

Javljam sa opisom baze čim pre!
[ avayaman @ 06.12.2009. 18:38 ] @
Malo sam studirao gore navedeni blog i došao do ove kreacije baze:

Code:
mysql_query("
CREATE TABLE prodavac (
    prodavac_id INT (8)unsigned NOT NULL auto_increment,
    prodavac_ime VARCHAR (32),
    prodavac_podaci VARCHAR (32),
    PRIMARY KEY (prodavac_id)
)
");

mysql_query("
CREATE TABLE brand (
    brand_id INT (8)unsigned NOT NULL auto_increment,
    brand_name VARCHAR (32),
    PRIMARY KEY (brand_id)
)
");

mysql_query("
CREATE TABLE prodavac_brand (
    brand_id INT (8),
    prodavac_id INT (8),
    FOREING KEY (brand_id),
    FOREING KEY (prodavac_id)
)   
");


Nisam siguran da sam ovo sa FOREING KEY dobro uradio, takođe mislim da sam doveo bazu do II NF i da dalje ne može da se formalizuje...

Slušam dalje upute :)
[ Shinhan @ 07.12.2009. 08:11 ] @
mysql_query("
CREATE TABLE prodavac_brand (
brand_id INT (8),
prodavac_id INT (8),
PRIMARY KEY (brand_id,prodavac_id)
)
");
[ avayaman @ 07.12.2009. 08:37 ] @
OK,
Sada će se formom <select multiple name="brand" action="akcija.php" > selektovati jedan ili više brendova, a ispis treba da budu podaci prodavca. Znam da bi trebalo koristiti JOIN, ali nisam siguran kako bi tačno sintaksa upita trebalo da glasi.
[ avayaman @ 11.12.2009. 14:47 ] @
Evo kako sada stvari stoje:

// Kreiranje tabele

Code:
CREATE TABLE prodavac (
    p_id INT (8)unsigned NOT NULL auto_increment,
    p_naziv VARCHAR (64),
    p_podaci, VARCHAR (256)
    PRIMARY KEY (p_id)
)

CREATE TABLE brand (
    b_id INT (8)unsigned NOT NULL auto_increment,
    b_name VARCHAR (32),
    PRIMARY KEY (b_id)
)

CREATE TABLE prodavac_brand (
    b_id INT (8),
    p_id INT (8),
    PRIMARY KEY (b_id, p_id)
)

Sada formom
Code:

<form method="post" action="test.php">
         <select multiple name="brand[]" size="5" >
         </select>
        <input type="submit" value="Traži" />
</form>

Selektujem jedan ili više brendova.

MySQL upit za slučaj da je samo jedan brand selektovan glasi:
Code:

SELECT prodavac.p_podaci
FROM brand, prodavac, prodavac_brand
WHERE prodavac_brand.b_id = brand.b_id
AND prodavac_brand.p_id = prodavac.p_id
AND (
brand.b_id =$POST[brand][0]
)
GROUP BY prodavac.p_id
HAVING (
COUNT( prodavac.p_id =1 ) )


U slučaju da je selektovano više brand-ova upit glasi:
Code:

SELECT prodavac.p_podaci
FROM brand, prodavac, prodavac_brand
WHERE prodavac_brand.b_id = brand.b_id
AND prodavac_brand.p_id = prodavac.p_id
AND (
    brand.b_id =$POST[brand][0]
OR brand.b_id =$POST[brand][1]
OR brand.b_id =$POST[brand][2]
             .
             .
             .
OR brand.b_id =$POST[brand][n-2]
OR brand.b_id =$POST[brand][n-1]
OR brand.b_id =$POST[brand][n]
)
GROUP BY prodavac.p_id
HAVING (
COUNT( prodavac.p_id =1 ) )


Kakva bi se petlja mogla napraviti u samom mysql upitu i da li je to moguće?

Koji je način da za više selektovanih brand-ova dobijem tačan upit?


P.S.
Pošto sam kreirao tabele, postavio sam Type=InnoDB, Collation=utf8_general_ci preko phpMyAdmin-a. Kada putem phpMyAdmin-a pristupim bazi i pregledavam sadržaj tabela, u njima se nalaze slova č ić. Međutim posle upita i prikazivanja na stranici ova ista slova se vide kao ?, pa ne znam u čemu je problem. U head-u stranice koja prikazuje sadržaj iz tabele stoji <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

[ bogdan.kecman @ 11.12.2009. 18:49 ] @
za utf - pogledaj malo forum .. radi search na "set names" ..

za upit, having je extra spor - izbegavaj gde mozes a i ovaj kako si ga ti napisao nece da radi ..

za or or or or ... pogledaj: http://dev.mysql.com/doc/refma...son-operators.html#function_in

Code:

<?php
...
$query='
SELECT prodavac.p_podaci, count(*) koliko
FROM brand, prodavac, prodavac_brand
WHERE prodavac_brand.b_id = brand.b_id
AND prodavac_brand.p_id = prodavac.p_id
AND  brand.b_id IN (' . implode(',', $_POST['brand']) . ')
GROUP BY prodavac.p_id
HAVING (koliko =1 )';
$result=mysql_query($query);
...
mysql_free_result($result);
...
?>


[ avayaman @ 13.12.2009. 21:21 ] @
mysql_query("set names 'utf8'");

rešilo problem, thnx!