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

    Dubbio su una query (strreplace?)

    Ciao a tutti!
    Volevo sapere se è possibile eseguire un'operazione di sostituzione caratteri in una query...

    Mi spiego con un esempio:
    In una tabella ho un campo "nome" che contiente determinati elementi, prendiamo il caso di un elemento chiamato "Oggetto numero: 2". Nella tabella quindi è salvato in formato varchar quell'elemento.

    Ho uno script php che mi sostituisce dei caratteri speciali con dei "-" in modo da avere nomi del tipo "nome-oggetto", nell'esempio di sopra invece di "Ogetto numero: 2" avrei "oggetto-numero-2".


    Ora supponiamo che io voglia ricercare nella query questo benedetto oggetto numero 2, avrò a livello di php questa variabile:

    $variabile = "oggetto-numero-2";

    nel database invece ci sarà "Ogetto: numero 2"

    Posso far sì che la query "smonti" il valore di quel determinato campo secondo le mie regole?

  2. #2
    Utente di HTML.it L'avatar di polinet
    Registrato dal
    Nov 2000
    Messaggi
    993
    semplicemente fai la cosa inversa.
    $campo = "oggetto numero 2";

    Il tuo script fa:
    $campo = str_replace(" ","-",$campo);


    Quando la cerchi:
    $campo = str_replace("-"," ",$campo);

    se ho capito bene!
    ¿Hasta la pasta?

  3. #3
    SELECT REPLACE(nomecampo, '-', ' ') from tabella
    Che le ali della libertà non perdano mai le piume...

    Gesù salva, Buddha fa backups incrementali.

  4. #4
    Perfetto! E' proprio quello che cercavo!

    Solo che le regole del replace sarebbero diverse, in php uso degli array... posso farlo anche all'interno della query?

    ovvero non vorrei convertire solo gli spazi, ma anche sostituire e accentate e i segni di punteggiatura...
    Inoltre mi servirebbe anche una funzione strtolower integrata nella query...

  5. #5
    strtolower:

    SELECT LOWER('STRINGA') from tabella
    Che le ali della libertà non perdano mai le piume...

    Gesù salva, Buddha fa backups incrementali.

  6. #6
    Originariamente inviato da Jack Barton
    strtolower:

    SELECT LOWER('STRINGA') from tabella
    e per sostituire anche altri caratteri oltre al "-" ? devo annidare?
    Io avrei la necessità di sostituire punti, duepunti, accentate...

  7. #7
    Questa è la mia funzione php:
    Codice PHP:
    function get_short_title($variabile) {
        global 
    $short_title;
        
    $caratteri_non_permessi = array(
                        
    "'"
                        
    "-"
                        
    " -"
                        
    "- ",
                        
    " - ",
                        
    "_",
                        
    "_ "
                        
    " _"
                        
    ": "
                        
    " :"
                        
    ":"
                        
    ";"
                        
    "; "
                        
    "; ",
                        
    "!"
                        
    " !"
                        
    "! "
                        
    "?"
                        
    "? "
                        
    " ?"
                        
    "."
                        
    ". "
                        
    " ."
                        
    ","
                        
    ", "
                        
    " ,"
                        
    " "
                        
    );
        
    $accentate = array("à","è","ì","ò","ù");
        
    $senzaccento = array("a","e","i","o","u");
        
    $step str_replace($accentate$senzaccento$variabile);
        
    $short_title strtolower(str_replace($caratteri_non_permessi"-"$step));
        return 
    $short_title;
        } 
    Come vedete i caratteri da sostituire sono molti... se in mysql facessi una cosa del genere

    REPLACE(REPLACE(REPLACE(nomecampo, '-', ' '), ';',' '), '_', '') etc

    verrebbe fuori qualcosa di troppo pesante?

  8. #8

  9. #9
    ho risolto con questa query mostruosa:
    codice:
    
    LOWER(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(g.title, ' ,', '-'), ', ', '-'), ',', '-'), ' .', '-'), '.', '-'), '. ', '-'), ' .', '-'), ' ?', '-'), '? ', '-'), '?', '-'), '! ', '-'), ' !', '-'), '!', '-'), '; ', '-'), ' ;', '-'), ';', '-'), ':', '-'), ' :', '-'), ': ', '-'), ' _', '-'), '_ ', '-'), '_', '-'), ' - ', '-'), '- ', '-'), '- ', '-'), '-', '-'), ' ', '-'))
    Dite che questa query richieda molte risorse?

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.