+ Rispondi alla Discussione
Risultati da 1 a 5 di 5

SQL - Da [spoiler:abcdefgh] a [spoiler]

Ultimo Messaggio di Francesco Di Caprio il:
  1. #1
    User
    Data Registrazione
    Jun 2008
    Messaggi
    281

    SQL - Da [spoiler:abcdefgh] a [spoiler]

    Ciao, ancora un altro problema con impex..

    Tutti i tag spoiler che avevo ora mi compaiono in questo modo: [spoiler:abcdefgh]

    Il problema è che in ogni post "abcdefgh" sono caratteri differenti, e possono essere lettere o numeri. L'assistenza vbulletin mi ha detto che dovrebbe esserci un modo per risolvere, tramite una query sql, però non riesco a capire come fare.. In pratica la parte variabile, due punti inclusi, deve scomparire. Come si può configurare una cosa del genere?

    So che la query è:
    Codice:
    UPDATE post SET pagetext = replace(pagetext, ‘text you want to replace’, ‘replacament text’);
    Ma come gestisco la parte variabile? L'unica cosa su cui penso di poter giocare è che si tratta sempre di 8 caratteri.

  2. #2
    User
    Data Registrazione
    Nov 2009
    Località
    Caserta
    Messaggi
    53
    Segui icefoxsoftware su Twitter Aggiungi icefoxsoftware su Google+
    Ciao
    Hai provato in questo modo?
    Codice:
    UPDATE post SET pagetext = replace(pagetext, ‘[spoiler %]’, ‘[spoiler]’);
    Praticamente, se non ho capito male, vuoi che quando nel db c'è [spoiler:abcdefgh] venga sostituito con [spoiler] e basta?
    Fammi sapere.
    Alfonso

  3. #3
    User
    Data Registrazione
    Jun 2008
    Messaggi
    281
    Confermo. C'è anche qualche tag tipo [center:12bvbn12] che voglio convertire in [center], ma fatto uno l'altro dovrebbe esser praticamente identico. Il problema è che di mysql ne so veramente poco...
    Il tuo codice da quest'errore: #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '[center%]’, ‘[center]’)' at line 1
    Mettendo gli apici "normali" prima e dopo le quadre invece modifica 0 righe.
    Ultima modifica di the_best; 18-05-13 alle 22:08

  4. #4
    User
    Data Registrazione
    Nov 2009
    Località
    Caserta
    Messaggi
    53
    Segui icefoxsoftware su Twitter Aggiungi icefoxsoftware su Google+
    Dunque, io non sono molto esperto di funzioni sql, preferisco (generalmente) elaborare i dati con PHP. Io farei in questo modo:

    Codice PHP:
    /*
    Qui fai la connessione al tuo database, fai la query e ottieni i vari risultati. 
    Quindi...
    */
    $query="SELECT....";
    $res mysql_query($query);
    while(
    $ris mysql_fetch_array($resMYSQL_ASSOC)) {
       
    $variabile $ris['pagetext'];
       while(
    true) {
            
    $stringa findRep($variabile);
            
    $res findRep($stringa);
            if(
    $stringa==$res) break;
            
    $variabile=$res;
        }
    // In $stringa hai il tuo testo con sostituito gli [spoiler:balbalaba] in [spoiler]. 
    //Adesso fai una query di update in modo da aggiornare il valore
    }
        
    function 
    findRep($string) {
        for(
    $i=0$i<strlen($string); $i++) {
            
    $cmp substr($string$i9);
            
    $str2 substr($string$i$i+9);
            if(
    $cmp=="[spoiler:") {
                
    $string substr($string0$i)."[spoiler]".substr($string,$i+18);
            }
        }
        return 
    $string
    Sostituendo nella funzione findRep [spoiler: con [center: modifichi anche per altri.
    Fammi sapere se va bene
    Alfonso

  5. #5
    User L'avatar di Francesco Di Caprio
    Data Registrazione
    Mar 2013
    Località
    Caserta
    Messaggi
    216
    Segui Francesco Di Caprio su Twitter Aggiungi Francesco Di Caprio su Google+ Aggiungi Francesco Di Caprio su Facebook Aggiungi Francesco Di Caprio su Linkedin
    Ciao the_best,

    dovresti utilizzare il comando REPLACE, come hai ben pensato, ma usando una Regular Expression che, se non hai un dedicato o un VPS su cui montare pacchetti UDF o magari i permessi per creare Procedure personalizzate, non puoi utilizzare.
    Se sei su un hosting economico con pochi permessi e poca possibilità di personalizzazione, ti conviene seguire il consiglio di icefoxsoftware, tenendo in considerazione che se vuoi modificare il contenuto del DB, ti basta eseguire una query di UPDATE per ogni valore TRUE restituito dalla sua funzione findRep().
    Endelab - Web Development

+ Rispondi alla Discussione

^ Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •  
  • Il codice BB è Attivato
  • Le faccine sono Attivato
  • Il codice [IMG] è Attivato
  • Il codice [VIDEO] è Attivato
  • Il codice HTML è Disattivato
  • Trackbacks Attivato
  • Pingback Attivato
  • Refback Attivato

SEO by vBSEO 3.6.0 PL2 ©2011, Crawlability, Inc.