Autor Zpráva
PetraPP
Profil
Vypisuji si data za pomocí WHERE kategorie="23". Existuje možnost, aby se vypsali data na tento dotaz a pak data ostatní, zbytek co mám v DB?
juriad
Profil
zruš WHERE (chceš prece všechna data) a nahraď to za ORDER BY (chceš nějak definovat pořadí).
ORDER BY kategorie="23" DESC
Toto zařídí, že záznam s kategorie="23" bude jako první (protože toto porovnání bude mít hodnotu 1; pro ostatní záznamy to bude 0).
Na konec ještě můžeš přidat řazení ostatních záznamů; třeba:
ORDER BY kategorie="23" DESC, kategorie ASC

Mimchodem, jaký je datový typ sloupce kategorie? Není to náhodou INT? V takovém případě bys uvozovky kolem číselné hodnoty neměla používat.
jefitto44
Profil
Môžeš tiež pridávať viacero kritérií zoradzovania, napr.

ORDER BY kategorie="23" DESC, name ASC, date DESC

A tak ti z toho vyjde, že ti zoradí ešte aj produkty/články/bohviečo z kategórie 23 podľa mena abecedne napr... Inak ich rozadzuje tuším tak, ako sú v databáze
PetraPP
Profil
Díky moc oběma! ORDER BY jsem používala spíše na jednoslovné příkazy, ale že se dá použít přímo i jako kategorie="23" jsem netušila. Díky moc ještě jednou!
juriad
Profil
PetraPP:
Obecně vzato WHERE chce jakýkoli výraz, který vyhodnotí jako true/false. ORDER BY chce jakýkoli seznam výrazů, které se vracejí hodnotu; můžeš tedy provádět mnohem šílenější věci. V tomto případě s kategoriemi se porovnání vyhodnotí (protože je kontextem žádána hodnota) na jedničku nebo nulu.

Třeba tato šílenost:
ORDER BY CHAR_LENGTH(nazev) * 2 = (ASCII(nazev) - ASCII('a') + 1) DESC
bude řadit jako první názvy 'b', 'dd', 'fff', 'hhhh', ... (ale není určeno v jakém pořadí tyto budou). Ne že by to bylo k něčemu užitečné. Čímkoli složitějším než obyčejným porovnáním obvykle dost uškodíš výkonu (za předpokladu, že řádků před setřízením bylo hodně).

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: