Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923

    [MySql] ordinare record considerando articoli

    Ciao a tutti. Volevo sapere se è possibile in mysql fare un ordinamento su un campo che tenga conto degli articoli (il,lo,la,gli. ecc).

    Ad esempio ho una tabella che contiene un elenco di film.

    titolo
    il collezionista di ossa
    i cento passi
    il dottor dolittle
    l'eternità e un giorno

    è possibile ottenere i film ordinati così

    cento passi
    collezionista di ossa
    dottor dolittle
    eternità e un giorno

    ciao e grazie.

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    è una cosa fattibile con le espressioni regolari o è meglio che ci metta una pietra sopra?

  3. #3
    sì, è fattibile, però un po' pesantuccio perché dovrebbe applicare quella funzione a tutta la tabella anche solo per restituirti i primi 5, visto che nell'indice li tiene ordinati contando il testo dall'inizio.

    Più performante sarebbe salvare su un altro campo il titolo per l'ordinamento, tipo
    collezionista di ossa, il

    In ogni modo se vuoi procedere con la prima ipotesi, la prima sintassi che mi viene in mente è usando IF e SUBSTRING, qualcosa tipo

    SELECT IF(SUBSTRING(titolo,0, 3) IN ('il ', 'lo ', 'la ', 'le ') OR SUBSTRING(titolo,0, 4) IN ('gli ', ......), LTRIM(SUBSTRING(titolo,3)), titolo) AS titolo FROM tabella ORDER BY titolo ASC

    completando ovviamente l'if con tutta la tua casistica

  4. #4
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Ciao skidx.
    Stavo provando la tua soluzione e sembra andare bene

    SELECT IF(SUBSTRING(titolo,1, 3) IN ("il ", "lo ", "la ", "le ")
    , LTRIM(SUBSTRING(titolo,3)), titolo)
    AS titolo FROM cineteca ORDER BY titolo ASC


    ho sostituito lo 0 con l'1 nel substring.

    Anche io avevo pensato di tagliare la testa al toro inserendo un altro campo come l'hai impostato tu ma non vorrei costringere l'utente a un doppio inserimento.

    L'unica cosa non riesco a far funzionare la tua soluzione impostando i vari or.
    Adesso riprovo.

  5. #5
    Originariamente inviato da nicola75ss
    Anche io avevo pensato di tagliare la testa al toro inserendo un altro campo come l'hai impostato tu ma non vorrei costringere l'utente a un doppio inserimento.
    come lo fai in lettura il substring, puoi farlo anche in scrittura

    Anzi, è più semplice ancora perché lo faresti in PHP avendo a disposizione il più versatile preg_replace.

    L'utente inserisce il titolo e tu ne salvi due versioni, quello normale e quello modificato, e nella tabella metti un indice nella colonna dei titoli modificati.

  6. #6
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Ma tu sei troppo avanti per me.
    Teoricamente non fa una grinza ma in fase di inserimento come la faccio una cosa del genere?

    Io inserisco: il dottor dolittle

    come la creo l'insert con i due campi

    campo_titolo: il dottor dolittle
    campo_ordinato dottor dolittle (il)

    non so come fare un if simile.

  7. #7
    avrai tipo il titolo inserito dall'utente nella variabile $titolo (o dove altro ti pare),
    farai
    $titoloArticoliViVoNelCulo = preg_replace("/(il|lo|la)\s(.+)/i", "$2 ($1)", trim($titolo));

    L'espressione regolare l'ho buttata là più o meno a casaccio, correggila tu.

    Poi fai una normalissima insert

    INSERT INTO .... SET campo_titolo = $titolo, campo_ordinato = $titoloArticoliViVoNelCulo, etc. etc.

  8. #8
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Ah,ho capito. Pensavo che intendessi farlo tramite sql.
    Ok, adesso guardo con calma la tua soluzione partendo dal fatto che sulle espressioni regolari sono una chiavica (più che sulle altre cose )
    Per adesso grazie come al solito.

  9. #9
    Originariamente inviato da nicola75ss
    Ah,ho capito. Pensavo che intendessi farlo tramite sql.
    si può fare (con lo stesso if della select) ma non ne vale la pena, molto più facile farlo nel php.

    Prego

  10. #10
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Ma come funziona, mi serve un'espressione regolare per gli articoli di due lettere, una per quelle di tre lettere e una ad esempio per gli articoli tipo l' ?
    :master:

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.