Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    ORDER BY con id fisso?

    Salve a tutti, ho una query MYSQL di questo tipo:

    codice:
    SELECT * FROM nome_tabella ORDER BY ......, nome ASC;
    A me serve un semplice ordine per nome ma che abbia come primo record un record specifio deciso da me (gli fornirei il valore ID).

    Passiamo ad un esempio pratico:

    Id Nome
    01 Chiara
    02 Alessio
    03 Giuseppe
    04 Andrea
    05 Riccardo

    Naturalmente l'ordine per nome dato da "ORDER BY nome ASC" è:

    02 Alessio
    04 Andrea
    01 Chiara
    03 Giuseppe
    05 Riccardo

    A me invece serve:

    03 Giuseppe (primo deciso da me in base all'ID)
    02 Alessio
    04 Andrea
    01 Chiara
    05 Riccardo

    qualcuno mi può dare una mano?

    Grazie

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    codice:
    select *,if(id = 3,1,2) as ordine from tabella
    order by ordine,nome

  3. #3
    Precisamente questo if(id = 1) as ordine cosa fa all'interno della query?

  4. #4
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    1 e 2 sono due valori arbitrari, uno più piccolo dell'altro. Semplicemente se il record è quello che cerchi (nel tuo esempio 3) assegna all'alias ordine il valore 1 e per tutti gli altri record il valore 2. Quindi ordini prima su tale campo e, a parità di ordine per tutti gli altri record, procedi normalmente con l'ordinamento alfabetico.

    Volendo puoi anche riscrivere la query così

    codice:
    select * from tabella order by if(id = 3,1,2),nome

  5. #5
    Grazie mille per la chiarificazione, ma purtroppo la query proposta era un esempio.. Invece sulla query reale la cosa si complica e inserendo quel parametro mi svuota il recordset:

    codice:
    SELECT a.*, a.introtext as text, CASE WHEN CHAR_LENGTH(a.alias) THEN CONCAT_WS(":", a.id, a.alias) ELSE a.id END as slug, CASE WHEN CHAR_LENGTH(cc.alias) THEN CONCAT_WS(":", cc.id, cc.alias) ELSE cc.id END as catslug FROM #__content AS a INNER JOIN #__categories AS cc ON cc.id = a.catid INNER JOIN #__sections AS s ON s.id = a.sectionid WHERE a.state = 1 AND ( a.publish_up = '0000-00-00 00:00:00' OR a.publish_up <= '2009-07-01 15:33:45' ) AND ( a.publish_down = '0000-00-00 00:00:00' OR a.publish_down >= '2009-07-01 15:33:45' ) AND s.id > 0 AND a.access <= 0 AND cc.access <= 0 AND s.access <= 0 AND (cc.id=41) AND (s.id=5) AND s.published = 1 AND cc.published = 1 ORDER BY if(id = 87,1,2), a.ordering ASC
    Ps= ho messo 87 io per provare.. Un record con id 87 esiste. Ho controllato manualmente su phpmyadmin.

    Come mai mi svuota il recordset secondo te?

  6. #6
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    La query senza l'ordinamento funziona?
    Hai provato a mettere anche l'alias di tabella

    ORDER BY if(a.id = 87,1,2)

    o cc.id che sia?

  7. #7
    :quote:

    Ma pensa te era proprio l'alias di tabella a.

    Grazie infinite!

    Per la cronaca quella era una query del modulo ROKTABS per joomla.

    In questo modo posso mettere in testa la tab che voglio!

    Grazie infinite!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.