Newsgroup: it.comp.www.php
Titolo: problema query

perche' questa:
SELECT name, id AS num FROM area ORDER  BY num = 3 DESC
non funziona (#1054 - Colonna sconosciuta 'num' in 'order clause')
mentre queste si:
SELECT name, id AS num FROM area ORDER  BY id = 3 DESC
SELECT name, id AS num FROM area ORDER  BY num
in MySQL....
Grazie

"Valerio" <k...@ko.ko> ha scritto nel messaggio
news:fOusc.329726$rM4.13...@news4.tin.it...

Dal manuale di MySQL, la sintassi di ORDER BY
[ORDER BY {unsigned_integer | col_name | formula} [ASC | DESC] ,...]
e inoltre
Columns selected for output may be referred to in ORDER BY and GROUP BY
clauses using column names, column aliases, or column positions. Column
positions begin with 1:
mysql> SELECT college, region, seed FROM tournament
    ->        ORDER BY region, seed;
mysql> SELECT college, region AS r, seed AS s FROM tournament
    ->        ORDER BY r, s;
mysql> SELECT college, region, seed FROM tournament
    ->        ORDER BY 2, 3;
Quindi quegli "ORDER BY num=3" e "ORDER BY id=3" non mi sembrano molto
sensati, dato che verranno valutati sempre come formule e il risultato sarà
un booleano (0|1)... ovvero ordinerai in base alla colonna 0 (=non esiste) o
alla colonna 1...
Cosa volevi ottenere? E cosa ottieni dalla seconda query "ORDER BY id=3"?
Saluti
LB

 Cosa volevi ottenere? E cosa ottieni dalla seconda query "ORDER BY id=3"?
Grazie per l'interessamento. Quello che dici non e' esatto, leggi qui:
http://www.mysql.com/doc/en/Sorting_rows.html
in particolare il secondo "User Comments". Facendo ORDER BY id=3 DESC
ottieni che la riga con id = 3 viene estratta per prima. La domanda e'
perche' non funziona con gli alias, mentre funziona perfettamente senza...
Ciao

 perche' non funziona con gli alias, mentre funziona perfettamente senza...
Ma non ha più senso usare WHERE id=3, che tra l'altro funziona pure con gli
alias?
-- 
Ciao da
       --§Ska-Man§--
----------------------
http://www.fantabasketpro.net
http://www.birraesalsiccia.net
------------
----------------------------------------------------------------------------
----

 alias?
Non devo ottenere solo le righe con id = 3, mi servono tutte le righe, ma la
prima deve essere proprio quella con id =3...
Ciao

"Valerio" <k...@ko.ko> ha scritto nel messaggio
news:GDEsc.331993$rM4.13...@news4.tin.it...

...interessante feature, non ne ero a conoscenza... forse mi tornerà utile,
grazie :-)
Io mi basavo sul manuale di MySQL 4.0.9, e non c'era alcun accenno ad una
sintassi simile.
Vedo che nel manuale online la sintassi è leggermente cambiata da
[ORDER BY {unsigned_integer | col_name | formula} [ASC | DESC] ,...]
in
[ORDER BY {col_name | expr | position} [ASC | DESC] ,...]
che però dovrebbe dire la stessa cosa, se unsigned_integer=position e
formula=expr.
Il riferimento alla sintassi da te utilizzata è presente solo in quel
commento, a quanto risulta da una (rapida) ricerca su "order by" nel manuale
online.
Peccato che proprio per questo motivo la documentazione non venga in aiuto
quando si tratta di capire, come nel tuo caso,  perchè tale sintassi non
funzioni con gli alias, quando invece un ORDER BY "normale" non ha alcun
problema...
Hai provato a postare su un newsgroup apposito, tipo
free.it.comp.database.mysql?
Saluti
LB

perche' non funziona con gli alias, mentre funziona perfettamente senza...
Perche' gli alias vengono valutati dopo. Quando fai GROUP BY o ORDER, tu
gli alias non ce li hai ancora, quando ti servirebbero.
Sicche':
SELECT id FROM table ORDER BY id;		funziona
SELECT id AS nid FROM table ORDER BY id;	funziona
SELECT id AS nid FROM table ORDER BY id=3;	funziona
SELECT id AS nid FROM table ORDER BY nid;	funziona
SELECT id AS nid FROM table ORDER BY nid=3;	NON FUNZIONA
perche' quando va a valutare "nid=3", ancora non ha valutato l'AS, e non
capisce cosa sia "nid" ("unknown column 'nid'"). Stessa cosa succede con
GROUP BY.
Si vede bene dalle ultime due query: quando fai la prima, nid sa cos'e',
e la usa; quando fai la seconda si lamenta che... non sa cosa sia nid.
Puoi pero' imbrogliare:
SELECT descrizione, id AS num, id=3 AS fake FROM zone ORDER BY fake DESC;
Se fai cosi', 'fake' viene espanso PRIMA dell'ORDER e MySQL lo riconosce
come ti aspetteresti.
Leonardo
-- 
Avere studiato senza mettere in pratica e' inutile;
mettere in pratica senza avere studiato e' pericoloso.
                                                - Conphpucio