Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    110

    Ordinamento alfabetico testo e numero

    Ciao ragazzi, vi chiedo una grande cortesia. Ho bisogno di ordinare i risultati di una query in ordine alfabetico corretto, di segui l'esempio:

    Albergo 1
    Albergo 101
    Albergo 15
    Albergo 201
    Albergo 22
    Casa 1
    Casa 101
    Casa 15
    Casa 201
    Casa 22

    Vorrei ordinarli in questo modo:

    Albergo 1
    Albergo 15
    Albergo 22
    Albergo 101
    Albergo 201
    Casa 1
    Casa 15
    Casa 22
    Casa 101
    Casa 201

    Grazie a tutti in anticipo.

  2. #2
    scusa, ma "albergo" non è prima di "casa" in ordine alfabetico???

    edit:
    inoltre occorrerebb sapere almeno database o dialetto sql che stai usando

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    110
    Hai ragione ho modificato.
    Grazie per la segnalazione

  4. #4
    ripeto che se non ci dici il database che usi con tutta la buona volontà è impossibile risponderti!!!!!!!!!!

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    110
    Database MySQL
    PHP 5.3.3

    La query standard è la seguente:

    codice:
    SELECT DISTINCT c.*, cl.*
    FROM `'._DB_PREFIX_.'category` c 
    LEFT JOIN `'._DB_PREFIX_.'category_lang` cl ON (c.`id_category` = cl.`id_category` AND `id_lang` = '.intval($cookie->id_lang).')
    LEFT JOIN `'._DB_PREFIX_.'category_group` cg ON (cg.`id_category` = c.`id_category`)
    WHERE 1
    AND (c.`active` = 1 OR c.`id_category`= 1)
    AND cg.`id_group` '.(!$cookie->id_customer ?  '= 1' : 'IN (SELECT id_group FROM '._DB_PREFIX_.'customer_group WHERE id_customer = '.intval($cookie->id_customer).')').'
    ORDER BY `level_depth` ASC, cl.`name` ASC');

  6. #6
    Allora,
    come puoi immaginare il problema è che l'ordinamento delle stringhe considera 1 prima di 2 ecc.

    Con MySQL non mi pare proprio ci siano funzioni magiche che risolvono il tuo caso...

    Una possibile soluzione è quella di formattare i nomi che metti in tabella "paddando" i numeri con degli '0'

    ad esempio
    Albergo 001
    Albergo 015
    Albergo 022
    Albergo 101
    Albergo 201
    Casa 001
    Casa 015
    Casa 022
    Casa 101
    Casa 201

    così facendo la tua select tirerà fuori i dati nell'ordine che chiedi...


    un'altra soluzione potrebbe essere farli metterli nell'ordine voluto dallo script (php,asp, o altro) che legge i dati dal DB..

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    110
    Sto utilizzando il php con la funzione sort ma non riesco mai ad ottenere il risultato che voglio...

  8. #8
    Originariamente inviato da 4Graphic
    Sto utilizzando il php con la funzione sort ma non riesco mai ad ottenere il risultato che voglio...
    Devi usare il flag SORT_NATURAL
    Codice PHP:
    $arr = array(
        
    "Casa2""Casa307""Casa3""Casa20"
    );

    sort($arrSORT_NATURAL);//<-----

    foreach ($arr as $key => $val) {
        echo 
    "arr[" $key "] = " $val "\n";


    l'unica problema è che questo flag è stato introdotto a partire da PHP 5.4,, quindi se stai usando una versione precedente...ti attacchi (tanto per parlare in gergo tecnico )

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    110
    Buongiorno si volevo usare invece natsort che funziona benissimo su un array normalissimo il problema è che l'array che vorrei sortare ha questa struttura:

    $casa = ("ID", "LINK", "LINK_REWRITE", "NAME", "DESC", "CHILDREN");

    $casa alla fine mi restituisce 4 array come sopra ed io vorrei ordinare questi 4 array (4 righe) sortando il 4 elemento che sarebbe NAME eccome l'esempio:

    $casa = ("1", "LINK", "LINK_REWRITE", "Casa 20", "DESC", "CHILDREN");
    $casa = ("2", "LINK", "LINK_REWRITE", "Casa 100", "DESC", "CHILDREN");
    $casa = ("3", "LINK", "LINK_REWRITE", "Casa 15", "DESC", "CHILDREN");
    $casa = ("4", "LINK", "LINK_REWRITE", "Casa 16", "DESC", "CHILDREN");

    Vorrei diventasse così:
    $casa = ("3", "LINK", "LINK_REWRITE", "Casa 15", "DESC", "CHILDREN");
    $casa = ("4", "LINK", "LINK_REWRITE", "Casa 16", "DESC", "CHILDREN");
    $casa = ("1", "LINK", "LINK_REWRITE", "Casa 20", "DESC", "CHILDREN");
    $casa = ("2", "LINK", "LINK_REWRITE", "Casa 100", "DESC", "CHILDREN");

    Non riesco purtroppo a farlo.

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.