V klauzuli ORDER BY příkazu SELECT lze kromě názvu sloupce, aliasu ze seznamu sloupců nebo obecného výrazu použít také číselnou konstantu. Ta určuje, podle kterého sloupce ze seznamu sloupců chceme řadit (počítáno od 1). Tento obrat jsem použil jen párkrát (obvykle tomu následovalo získání dat funkcí mysql_fetch_row a ne obvyklou mysql_fetch_assoc), ve většině případů doporučuji dát výrazu ze seznamu sloupců alias a řadit podle něj.
<?php // vyhledání výrazu v různých tabulkách $prohledat = array(); if (isset($_GET["prohledat"]["stranky"])) { $prohledat[] = "SELECT url, titulek, MATCH(titulek, obsah) AGAINST ('" . mysql_real_escape_string($_GET["search"]) . "') FROM stranky # ..."; } if (isset($_GET["prohledat"]["novinky"])) { $prohledat[] = "SELECT url, nadpis, MATCH(nadpis, zprava) AGAINST ('" . mysql_real_escape_string($_GET["search"]) . "') FROM novinky # ..."; } if ($prohledat) { $result = mysql_query("(" . implode(") UNION (", $prohledat) . ") ORDER BY 3"); while ($row = mysql_fetch_row($result)) { // ... } mysql_free_result($result); } ?>
Pokud bychom se bez obratu ORDER BY 3
chtěli obejít, bylo by potřeba vytvořit tolik aliasů, kolik typů objektů prohledáváme. Pokud bychom navíc chtěli použít mysql_fetch_assoc, museli bychom aliasy přidat i sloupcům, které nemají ve všech dotazech stejný název.
Přijďte si o tomto tématu popovídat na školení Návrh a používání MySQL databáze.
Diskuse je zrušena z důvodu spamu.