U takto jednoduchého příkladu se to dá omluvit, ale pokud to má být "ukázkový" příklad, pak je to naprostá trotlovina. Velké množství dotazů se používá na několika místech - jednou se ze stejných dat generuje třeba ceník pro internetového uživatele, podruhé se ze stejných dat generuje ceník pro prodejce, doplněný o možnosti změn. Pro podobné příklady bych použil zásadně VIEW. To je předem připravený dotaz, uložený přímo v databázi, a na všech místech programu poskytující pokaždé stejná data. Pokud se později provádějí změny do struktury tabulek, stačí opravit dotaz na jediném místě - v databázi - a do programů se promítnou změny bez zásahu programátorovy ruky.
Takže "odstrašující řešení" je skutečně odstrašující, "za určitých okolností přijatelné řešení" je odstrašující a nakonec "správné řešení" je v kontextu ukázkového příkladu taky odstrašující.
Vzorový příklad by měl vypadat v databázi takto:
CREATE VIEW vyrobky_view AS SELECT vyrobky.id, vyrobky.nazev, skupiny.nazev AS skupina_nazev FROM vyrobky INNER JOIN skupiny ON vyrobky.skupina = skupiny.id
a v PHP takto:
// správné řešení
$result = mysql_query("SELECT * FROM vyrobky_view WHERE podminka");
while ($row = mysql_fetch_assoc($result)) {
echo "<a href='?id=$row[id]'>$row[nazev]</a>"
.($row[skupina_nazev])<br/>\n";
}
mysql_free_result($result);
Pokud databáze MySQL nezvládá VIEW, pak by se na projekty, obsahující více než jednu tabulku, vůbec neměla používat.