Visualizzazione dei risultati da 1 a 10 su 10

Discussione: Where IN

  1. #1

    Where IN

    Codice PHP:
    $parola_split split(" ",$Parola);
    $items count($parola_split);
    for (
    $x 0$x $items$x++) {
    if ( 
    trim($parola_split[$x]) != ""$parola2[] = trim($parola_split[$x]);
    }

    foreach(
    $parola2 as $i => $v) {
    $parola2[$i] = "'%".addslashes($v)."%'";
    }
    $str_qstring implode(","$parola2);
    if (
    $items 1) {
    $query "SELECT * FROM parole WHERE Chiave IN($str_qstring)";
    } else {
    $query "SELECT * FROM parole WHERE Chiave LIKE '%$Parola%'";

    Confermato che $Parola è presente nel db, per quale motivo con LIKE la trova e con IN no? Es., se Chiave è pippo e cerco pippo e pluto non mi trova nulla perché effettua la prima query, cercando invece solo pippo LIKE me la trova.

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    In cerca la corrispondenza esatta.
    Quindi se hai 3 record

    pippo
    pluto
    pippo e pluto

    where in ('pippo','pluto')

    ti restituirà solo i primi 2 record e non il terzo.

  3. #3
    la funzione IN() trova una stringa precisa.

    LIKE '%$Parola%' trova una stringa che contiene in un qualsiasi punto (della stringa) la parola indicata dalla variabile.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  4. #4
    Originariamente inviato da nicola75ss
    In cerca la corrispondenza esatta.
    Quindi se hai 3 record

    pippo
    pluto
    pippo e pluto

    where in ('pippo','pluto')

    ti restituirà solo i primi 2 record e non il terzo.
    Lo so, ma non mi trova proprio nulla.

  5. #5
    Originariamente inviato da poeta1978
    Lo so, ma non mi trova proprio nulla.
    perche' evidentemente 'pippo' e 'pluto' non sono esattamente il contenuto del campo Chiave

    prova con where Chiave like 'pippo' senza i jolly %

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  6. #6
    Originariamente inviato da piero.mac
    perche' evidentemente 'pippo' e 'pluto' non sono esattamente il contenuto del campo Chiave
    Infatti c'è solo 'pippo', come faccio a farla trovare.

  7. #7
    Originariamente inviato da piero.mac
    perche' evidentemente 'pippo' e 'pluto' non sono esattamente il contenuto del campo Chiave

    prova con where Chiave like 'pippo' senza i jolly %
    Così va, ma ho un altro problema, riporto lo script completo:
    Codice PHP:
    $parola_split split(" ",$Parola);
    $items count($parola_split);
    for (
    $x 0$x $items$x++) {
    if ( 
    trim($parola_split[$x]) != ""$parola2[] = trim($parola_split[$x]);
    }

    foreach(
    $parola2 as $i => $v) {
    $parola2[$i] = "'".addslashes($v)."'";
    }
    $str_qstring implode(","$parola2);
    if (
    $items 1) {
    $query "SELECT * FROM parole WHERE Chiave IN($str_qstring)";
    } else {
    $query "SELECT * FROM parole WHERE Chiave LIKE '%$Parola%'";
    }
    $result mysql_query($query$db);
    while (
    $row mysql_fetch_array($result)) {
    $Termine $row["Parola"];
    if (
    $Termine=="avellino") {
    $TermineProv "1";
    } elseif (
    $Termine=="benevento") {
    $TermineProv "2";
    } elseif (
    $Termine=="caserta") {
    $TermineProv "3";
    } elseif (
    $Termine=="napoli") {
    $TermineProv "4";
    } elseif (
    $Termine=="salerno") {
    $TermineProv "5";
    }

    if (
    $Termine=="abruzzo") {
    $TermineReg "1";
    } elseif (
    $Termine=="basilicata") {
    $TermineReg "2";
    } elseif (
    $Termine=="calabria") {
    $TermineReg "3";
    } elseif (
    $Termine=="campania") {
    $TermineReg "4";
    } elseif (
    $Termine=="emilia-romagna") {
    $TermineReg "5";
    } elseif (
    $Termine=="friuli-venezia giulia") {
    $TermineReg "6";
    } elseif (
    $Termine=="lazio") {
    $TermineReg "7";
    } elseif (
    $Termine=="liguria") {
    $TermineReg "8";
    } elseif (
    $Termine=="lombardia") {
    $TermineReg "9";
    } elseif (
    $Termine=="marche") {
    $TermineReg "10";
    } elseif (
    $Termine=="molise") {
    $TermineReg "11";
    } elseif (
    $Termine=="puglia") {
    $TermineReg "12";
    } elseif (
    $Termine=="piemonte") {
    $TermineReg "13";
    } elseif (
    $Termine=="sardegna") {
    $TermineReg "14";
    } elseif (
    $Termine=="sicilia") {
    $TermineReg "15";
    } elseif (
    $Termine=="toscana") {
    $TermineReg "16";
    } elseif (
    $Termine=="trentino-alto adige") {
    $TermineReg "17";
    } elseif (
    $Termine=="valle d'aosta") {
    $TermineReg "18";
    } elseif (
    $Termine=="veneto") {
    $TermineReg "19";
    } elseif (
    $Termine=="umbria") {
    $TermineReg "20";
    }

    if (
    $Termine=="centri diurni polifunzionali") {
    $TermineTipo "2";
    } elseif (
    $Termine=="case famiglia") {
    $TermineTipo "3";
    } elseif (
    $Termine=="comunità alloggio") {
    $TermineTipo "4";
    } elseif (
    $Termine=="comunitàdi accoglienza per gestanti, madri e bambini") {
    $TermineTipo "5";
    } elseif (
    $Termine=="comunità educative di tipo familiare") {
    $TermineTipo "6";
    } elseif (
    $Termine=="gruppi appartamento") {
    $TermineTipo "7";
    } elseif (
    $Termine=="comunità di pronta e transitoria accoglienza") {
    $TermineTipo "8";
    } elseif (
    $Termine=="comunità di accoglienza per donne maltrattate") {
    $TermineTipo "9";
    }

    if (
    $Termine=="handicap") {
    $Handicap "1";
    }

    $query2 "SELECT t2.ID as IDStruttRic, t2.Tipo as TipoStruttRic,  t2.Regione as RegioneStruttRic, t2.Provincia as ProvinciaStruttRic, t1.Eta as EtaStrutt, t1.Handicap as HandicapStrutt, t1.Comportamento as ComportamentoStrutt FROM strutture as t2 JOIN dati_strutt as t1 ON t2.ID = t1.Struttura WHERE t2.Tipo = '$TermineTipo' OR t2.Regione = '$TermineReg' OR t2.Provincia = '$TermineProv' OR t1.Handicap = '$Handicap' OR t1.Comportamento = '$Handicap'";
    $RisultatiChiave mysql_num_rows($result2);
    while (
    $result2 mysql_query($query2$db)) {
    $RisultatiChiave++;
    }
    }

    if (
    $RisultatiChiave 0) {
    echo 
    "

    <center>[b]Non hai trovato ci&ograve; che cercavi? Nelle strutture presenti nel sito ci sono 
    $RisultatiChiave risultati[/b]</center>";

    In pratica eseguendo $query2 lo script si "allunga" fino a dare Fatal error: Maximum execution time of 30 seconds exceeded in....

  8. #8
    tieni presente che IN() vuole i dati separati da una virgola e tra apici se stringhe.

    IN('pippo', 'pluto')

    per quanto riguarda lo script... se un dato del tipo:

    if ($Termine=="avellino") {
    $TermineProv = "1";

    lascia presumere che '1' sia un attributo di avellino e che '1' sia attributo di abruzzo.... e quindi perfettamente inutile eseguire un switch per assegnare un valore che puo' essere direttamente messo nella tabella.

    mi sa inoltre che la struttura delle tabelle sia migliorabile.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  9. #9
    Facendo un echo la $query2 la esegue bene, il fatto è che si rallenta.

  10. #10
    Originariamente inviato da poeta1978
    Facendo un echo la $query2 la esegue bene, il fatto è che si rallenta.
    Guarda che cio' che fai nella query2 non lo capisco... ma proprio per nulla.

    utlizzi la variabile $result2 prima ancora di eseguire la query.

    questo che segue poi.... mi serve uno psicanalista per capirla...

    Codice PHP:
    while ($result2 mysql_query($query2$db)) {

    $RisultatiChiave++;

    esegui la query dentro ad un while e continua finche' $result2 (che usi pure in mysql_num_rows() prima di valorizzarlo) sara' TRUE.... ma sara' true fino al fallimento dell'enel se il time out non lo fermasse...

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

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.