Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13

Discussione: ricerca nel sito

  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2013
    Messaggi
    72

    ricerca nel sito

    Salve a tutti vorrei fare una pagina che mi cerca nel sito una persona, sono riuscito a fare una pagina che cerca inserendo cognome e nome ma se scrivo al contrario cioè nome e cognome non lo trova, come posso fare? ecco il codice:
    error_reporting(0);
    $button = $_GET ['submit'];
    $search = $_GET ['search'];

    if(!$button)
    echo "you didn't submit a keyword";
    else
    {
    if(strlen($search)<=1)
    echo "Search term too short";
    else{
    echo "You searched for $search <hr size='1'></br>";
    mysql_connect("localhost","root","");
    mysql_select_db("database");

    $search_exploded = explode (" ", $search);

    foreach($search_exploded as $search_each)
    {
    $x++;
    if($x==1)
    $construct .="cognome LIKE '%$search_each%'";
    else
    $construct .="AND nome LIKE '%$search_each%'";
    }

    $construct ="SELECT * FROM registrazione WHERE $construct";
    $run = mysql_query($construct);

    $foundnum = mysql_num_rows($run);

    if ($foundnum==0)
    echo "Sorry, there are no matching result for $search.</br></br>1.
    Try more general words. for example: If you want to search 'how to create a website'
    then use general keyword like 'create' 'website'</br>2. Try different words with similar
    meaning</br>3. Please check your spelling";
    else
    {
    echo "$foundnum results found !

    ";

    while($runrows = mysql_fetch_assoc($run))
    {
    $nome = $runrows ['nome'];
    $cognome = $runrows ['cognome'];
    $username = $runrows ['username'];

    echo "
    $username

    $nome

    $cognome


    ";

    }
    }

    }
    }

    sperando in una vostra risposta vi porgo i miei piu sentiti e distinti saluti, ciao

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    636
    Costruisci la condizione where facendo qulcosa del genere:
    codice:
    //....
    list($first, $last) = explode (" ", $search);
    $construct .="cognome LIKE '%$first%' AND nome LIKE '%$last%'";
    $construct .=" OR cognome LIKE '%$last%' AND nome LIKE '%$first%'";
    
    $construct ="SELECT * FROM registrazione WHERE $construct";
    $run = mysql_query($construct);
    
    //...
    Considera anche la possibilità di rendere i campi cognome e nome FULLTEXT così da poter usare MATCH AGAINST e ordinare i risultati di ricerca per attinenza.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2013
    Messaggi
    72

    grazie mille

    ciao grazie per avermi risposto e grazie mille per l'aiuto ho fatto come mi hai detto e funziona grazie ancora quando hai bisogno se posso aiutarti ci sono ok? ciao

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2013
    Messaggi
    72

    una domanda

    ciao scusami una domanda, se volessi cercare anche altri campi oltre a nome e cognome come si fa?, ciao scusami grazie

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2013
    Messaggi
    72

    ok come non detto

    ok come non detto ho trovato, ciao grazie ancora quando vuoi un aiuto se posso ci sono ok?, ciao

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    636
    supponiamo siano i campi a,b,c

    codice:
    list($v1, $v2, $v3) = explode (" ", $search);
    
    $construct .="a LIKE '%$v1%' AND b LIKE '%$v2% AND c LIKE '%$v3%'";
    $construct .=" OR a LIKE '%$v1%' AND b LIKE '%$v3% AND c LIKE '%$v2%'";
    $construct .=" OR a LIKE '%$v2%' AND b LIKE '%$v1% AND c LIKE '%$v3%'";
    $construct .=" OR a LIKE '%$v2%' AND b LIKE '%$v3% AND c LIKE '%$v1%'";
    $construct .=" OR a LIKE '%$v3%' AND b LIKE '%$v1% AND c LIKE '%$v2%'";
    $construct .=" OR a LIKE '%$v3%' AND b LIKE '%$v2% AND c LIKE '%$v1%'";
    All'aumentare dei campi aumentano le condizioni, per essere più precisi se i campi sono n, avrai n*n! condizioni (3 campi 3*6 = 18 condizioni, 4 campi 4*24 = 96 condizioni, 5 campi 5*120 = 600 condizioni).
    Insomma non è un approccio molto conveniente.

    Quindi ripeto l'ideale sarebbe utilizzare MATCH AGAINST

    Supponendo che i campi siano a, b, c, d, e, f, g, h, i per prima cosa dovresti fare:
    ALTER TABLE nomeTabella ADD FULLTEXT(a, b, c, d, e, f, g, h, i);

    Così da poter utilizzare match against su questi campi, esempio:
    codice:
    $valori =  "'+" . implode(" +", explode (" ", $search)) . "'";
    
    $query = "SELECT *, MATCH(a,b,c,d,e,f,g,h,i) AGAINST($valori IN BOOLEAN MODE) AS attinenza FROM nomeTabella WHERE MATCH(a,b,c,d,e,f,g,h,i) AGAINST($valori IN BOOLEAN MODE) ORDER BY attinenza DESC";
    Molto meglio no?

    Considera anche che non ho mai utilizzato MATCH AGAINST e che forse è meglio chiedere nella sezione del forum riservata ai database.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2013
    Messaggi
    72

    ciao

    ciao ma il fulltext come si fa?, non sono riuscito a trovare nulla a riguardo, tu sai come si fa?, ciao grazie

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    636
    devi alterare la struttura della tabella usando quella query che ti ho scritto

    ALTER TABLE nomeTabella ADD FULLTEXT(a, b, c, d, e, f, g, h, i);

  9. #9
    Utente di HTML.it
    Registrato dal
    Jun 2013
    Messaggi
    72

    ciao

    quindi è solo codice php, non devo fare tramite sql ho capito bene?, ciao

  10. #10
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    636
    hai capito tutto il contrario . La tabella la devi alterare una volta sola da phpmyadmin o da terminale o da dove gestisci il database. A quel punto su quei campi che setti come fulltext puoi usare match against da php da phpmyadmin da terminale ...

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.