1. Osobne davam prednost, kdyz id pojmenujes stejne v obou tabulkach.
Tabulka cast: id_cast,nazov, seria, cast, id_serial
Tabulka serial: id_serial, nazov, hodnotenie
2. Je dobre vyuzit pro dotaz formatovani, zvlast u slozitejsich a kdyz neco nejde
SELECT
casti.nazov as castiNazov,
serial.nazov as serialNazov
Form -- FROM?
casti
JOIN serial ON casti.idSerial = serial.id - LEFT JOIN?
3.
SELECT
a.nazov AS castiNazov,
b.nazov AS serialNazov
FROM
casti a
LEFT JOIN serial b ON b.id_serial = a.id_serial
Je to mozna trochu neprehledne, ale uz se mi to vyplatilo pri vice slozitejsich dotazech, kdyz dam aliasy k tabulkam, shodne pro vsechny casti programu jako a, b, c ... Nemusi se pak dlouze opisovat nazvy.
Kdyz mam nazvy sloupcu, viz 1, tak nemusim hledat, jak jsem ten sloupec pojmenoval.
Kdyz Joinuji, tak pouzivam JOIN LEFT. Malokdy JOIN jako left + right nebo JOIN RIGHT.
A kdyz joinuji zleva, tak ji pripojuji podle jejiho sloupce id na hodnotu z jine tabulky. Neco, jako kdyz pises WHERE b.id_serial = 123, nepises to 123 = b.id_serial. U joinu to ma svuj vyznam, ale. U where nevim, mozhlo by to byt pomalejsi. Zalezi na tom, jak je sql engine optimalizovany, zda si to sam spravne usporada..
4. ukladej si query do promenne. Kdyz ti pak neco nejede, tak si udelas echo $query. Pripadne nevim, jak to funguje pri skladani dotazu pres pdo->bind, jestli se to da tez vypsat i s promennymi z php.
Pak uvidis, co v tom dotazu je a muzes ho spustit pres phpmyadmin. Vyberes databazi, zalozku sql, vlozis dotaz, kliknes ok. Vypise to chyby nebo treba 0 radku.
5. pouzivej vypisovani chyb.
public function querySafe($query)
{
$this->sth = $this->conn->prepare($query);
$this->sth_exec = $this->sth->execute();
return $this->sth;
}
public function queryDebug($query)
{
echo "\n<div class=\"query\">query = ".$query."</div>";
$this->querySafe($query);
if (!$this->sth_exec && $trans==false)
{
$this->queryError($this->sth);
}
return $this->sth;
}
public function queryError($sth)
{
if (!$sth) {$this->error('Not sth!'); return;}
$this->error('Error query: ' . $sth->errorCode().' '.implode(" - ",$sth->errorInfo()));
}
Cili, kdyz selze sth, lze vypsat
$sth->errorCode().' '.implode(" - ",$sth->errorInfo())
Tim bys odhalil treba tu chybu form / FROM
6. Muzes zkusit obarvovani sql dotazu. Bud primo phpmyadmin nebo ja pouzivam i
http://www.dpriver.com/…qlformat.htm
!!! pamatuj vsak, ze kazdy sql dotaz muze byt monitorovan, ukladan. I v pripade phpmyadmina. Hlavne se vyhybat online sluzbam, pokud chces zajistit bezpecnost. Aby se treba hackeri nedozvedeli, jak mas pojmenovane tabulky, sloupce a pod.