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

    query di ordinamento un po strana...

    ho una situazione un po complicata, faccio un esempio e vedo se riesco a spiegarmi.

    esempio: tabella con due campi: indice e titolo

    in pratica, indice è un campo vuoto nel 95% dei casi,mentre titolo è sempre occupato.
    quello che voglio che accada, è poter fare una select, con un "order by titolo asc" MA se quella entry ha un campo "indice", deve essere preso questo per l'ordinamento crescente al posto di titolo.

    è un casino da spiegare, comunque ecco l'sql per una tabella di test:
    codice:
    CREATE TABLE `test` (
      `indice` varchar(50) NOT NULL default '',
      `titolo` varchar(50) NOT NULL default ''
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
    
    -- 
    -- Dump dei dati per la tabella `test`
    -- 
    
    INSERT INTO `test` VALUES ('', 'Milano di notte');
    INSERT INTO `test` VALUES ('', 'Lodi di giorno');
    INSERT INTO `test` VALUES ('', 'venezia di sera');
    INSERT INTO `test` VALUES ('', 'avellino al pomeriggio');
    INSERT INTO `test` VALUES ('male del sole', 'il male del sole');
    quello che voglio poter fare è una select il cui risultato sia:
    avellino al pomeriggio
    lodi di giorno
    il male del sole
    milano di notte
    venezia di sera

    è fattibile?

    un grazie in anticipo a chi mi può dare una mano

  2. #2
    se mi ricordo bene la sintassi dovresti fare qualcosa del genere

    select if(indice not null,indice,titolo) from tabella where ..... order by .....;

  3. #3
    Originariamente inviato da mondobimbi
    se mi ricordo bene la sintassi dovresti fare qualcosa del genere

    select if(indice not null,indice,titolo) from tabella where ..... order by .....;
    questa non me la prende.......

    ho provato con

    select if(indice!=null,indice,titolo) AS prova FROM test ORDER BY prova

    ma non funziona lo stesso....

  4. #4
    E' probabile che un campo vuoto in fase di ordinamento venga prima di ogni altra cosa quindi basta dare come criterio di ordinamento prima quello sull'indice e poi quello sul titolo.

    Quindi:
    codice:
    SELECT *
    FROM test
    ORDER BY indice ASC, titolo ASC

  5. #5
    Originariamente inviato da LeaderGL
    E' probabile che un campo vuoto in fase di ordinamento venga prima di ogni altra cosa quindi basta dare come criterio di ordinamento prima quello sull'indice e poi quello sul titolo.

    Quindi:
    codice:
    SELECT *
    FROM test
    ORDER BY indice ASC, titolo ASC
    non funziona nemmeno questa..........
    con quella che hai messo fra i "code" ecco cosa esce:

    avellino al pomeriggio
    lodi di giorno
    milano di notte
    venezia di sera
    il male del sole

    mentre invece io vorrei che uscisse:

    avellino al pomeriggio
    lodi di giorno
    il male del sole
    milano di notte
    venezia di sera

  6. #6
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    codice:
    select *,if(indice = '',titolo,indice) as ordine
    from test
    order by ordine asc

  7. #7
    Originariamente inviato da nicola75ss
    codice:
    select *,if(indice = '',titolo,indice) as ordine
    from test
    order by ordine asc
    ancora un grazie nicola, un giorno ti offro pizza e birra
    ma quello fra i "code" non mi funzionava.......
    è comunque stato uno spunto e questo:

    codice:
    select *,if(indice!='null',indice,titolo) as ordine
    from test
    order by ordine asc
    sembra che invece funzioni alla perfezione.....
    il problema è che sono andato completamnte a caso a costruire la query, anche spulciando la guida di mysql mi sembrava di aver capito come funziona il select if ma all'atto pratico sembra funzioni in modo diverso.......
    non ci ho capito nulla insomma.....

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 © 2025 vBulletin Solutions, Inc. All rights reserved.