[ mp3lab @ 24.03.2012. 22:22 ] @
Pozdrav

Kako sam relativno nov i neiskusan u ovome,
molio bih malu pomoć u vezi spajanja tablica (PHP/MySQL/XAMPP)

Naime, imam 4 tablice:

u prvoj koja se zove asort sa 4+ stupaca:
id catid pid tipid ...

id je primary key a catid, pid, tipid su foreign keys iz druge tri tablice kategorija, tipovi i proizvodaci.

E sad bi ja htio napraviti upit koji bi mi dao npr sve zapise u tablici asort koji imaju npr tipid=4,
ustvari tipid bi bio u $_GET varijabli
ako ne spajam tablice mislim da bi to bilo samo

Code:
$q1 = "SELECT * FROM asort WHERE tipid='$_GET[tipid]' order by cijena asc";

ali onda dobijem samo ove foreign keys a ja bi htio nazive iz ove tri druge tablice pa sam probao sa:

Code:
$q1 = "SELECT * FROM asort LEFT JOIN (kategorija, proizvod, tip)
                 ON (kategorija.catid=asort.catid AND proizvod.pid=asort.pid AND tip.tipid=asort.tipid) 
                 where tipid='$_GET[tipid]' order by cijena asc";

ali rezultat je:
"Column 'tipid' in where clause is ambiguous"

Eto, ako ima netko da malo pomogne hvala unaprijed
Dval
[ djoka_l @ 24.03.2012. 22:59 ] @
Umesto
where tipid='$_GET[tipid]' order by cijena asc
treba da bude
where asort.tipid='$_GET[tipid]' order by cijena asc

Takođe, ako postije polje "cijena" u još nekoj od navedenih tabela, onda staviti asort.cijena
[ mp3lab @ 24.03.2012. 23:24 ] @
Hvala lijepa na brzom odgovoru! https://static.elitesecurity.org/thumbup.gif

bio sam jako blizu

sad sam probao i sa
Code:

$q1 = "SELECT * FROM asort, kategorija, proizvod, tip 
            WHERE 
            kategorija.catid=asort.catid AND 
            proizvod.pid=asort.pid AND 
            tip.tipid=asort.tipid AND
            asort.tipid='$_GET[tipid]' order by cijena asc";


pa koliko vidim da radi i ovako
ali baš nisam siguran da znam u čemu je razlika pa ako ti se da malo pojasniti
hvala unaprijed
pozz
[ djoka_l @ 24.03.2012. 23:47 ] @
Nema nikakve razlike između ta dva načina pisanja upita. Svaka SQL ANSI kompatibilna baza podataka prihvatiće oba načina i dati iste rezultate.
[ Milos911 @ 25.03.2012. 15:00 ] @
Nema mnogo veze sa pitanjem, ali cisto da znas da ne smes da radis $_GET direktno u upitu, jer rizikujes mysql injection (google it)...
[ mp3lab @ 26.03.2012. 00:54 ] @
Što se tiče sigurnosti...
imam funkciju koju pozivam

Code:
function check($x=null) {
  if(!isset($x)) return null;
  else if(is_string($x)) return mysql_real_escape_string($x);
  else if(is_array($x)) {
    foreach($x as $k=>$v) {
      $k2=mysql_real_escape_string($k);
      if($k!=$k2) unset($x[$k]);
      $x[$k2]=check($v);
    }
    return $x;
  }
}


i odmah na početku
Code:
$_GET=check($_GET)


to sam negdje vidio na netu
Jel to može tako ići ili bi treba iz $_GET polja svaki put izvući varijablu i onda mysql_real_escape_string?

pozz