ORDER BY 1
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
Jan Tichý:
"ve většině případů doporučuji dát výrazu ze seznamu sloupců alias a řadit podle něj"Je to sice asi zřejmé z příkladů, ale stejně by bylo dobré zmínit, že řazení podle aliasů se týká MySQL. Obecně to tak fungovat nemusí, například v PostgreSQL, kde je do ORDER BY nutné místo aliasu vypsat opět znovu celý výraz.
tomh:
Kromě MySQL se to určitě ještě týka Oracle, který umožnuje stejný zápis pomocí čísel.melda:
mozna uz to tu nekdo nekdy zminil. Pokud chceme vypsat radky v nahodnem poradi lze se mysql dotazat takto:SELECT * FROM tabulka ORDER BY RAND()
Diskuse je zrušena z důvodu spamu.

