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

Discussione: ricerca su sito

  1. #1

    ricerca su sito

    ciao a tutti, ho bisogno di fare una ricerca su un sito e devo poter cercare più parole in più campi, non so se avete capito, lo spiego meglio:

    prendiamo ad esempio che nel campo cerca scrivo 'mario rossi 0171' devo trovare tutti gli utenti che tra nome, cognome, telefono e email abbiano tutte quelle parole.

    Il mio metodo è il seguente:
    codice:
    $vsSql="select * from utenti";
    $vlQry=mysql_query($vsSql,$vlDb) or die (mysql_error());
    $trovato=1;
    while($vaRow=mysql_fetch_array($vlQry,MYSQL_ASSOC))
    {
      $stringa=$vaRow[nome].' '.$vaRow[cognome].' '.$vaRow[tel].' '.$vaRow[email];
      $stringa2 = explode (" ", $_GET[cerca] );
      foreach ($stringa2 as $parola)
      {
        if(stristr($stringa,$parola))
        {}
        else
        {$trovato=0;}
      }
      if($trovato)
      {
        echo $vaRow[id];
      }
    }
    il problema è che ci sono circa 500.000 utenti e la ricerca a volte impiega ache più di 40-50 secondi. Avete un metodo alternativo? o qualche correzione?

  2. #2
    Impiega tutto questo tempo perchè ogni volta deve scorrere tutti i record, e per ogni record deve eseguire un ciclo sulle parole da cercare.
    Devi utilizzare la prarola chiave LIKE dell'sql, esempio:
    codice:
    select * from utenti WHERE nome LIKE '%$variabile%' OR cognome LIKE '%$variabile%';
    ovviamente devi riadattarlo in modo da contemplare tutti i casi.
    Altra cosa perchè utilizzare if else quanto basta solo l'if?
    codice:
     if(stristr($stringa,$parola)){
    } else {
       $trovato=0;
    }
    diventa
    codice:
     if(!stristr($stringa,$parola))    
       $trovato=0;
    CODENCODE \ Branding \ Design \ Marketing
    www.codencode.it

  3. #3
    mio dio che codice contorto O.O XD

    Codice PHP:
    <?     
    if (isset($testo) == false || $testo == "") {         
    echo 
    "nessun risultato!";     
    }else{         
    echo 
    $testo;} 
    if (isset(
    $testo) == false || $testo == "")     { ?>
     

    attenzione: Inserire una parola da cercare.</p>
     <? }else{         
    $arr_txt explode(" "$testo);         
    $sql "SELECT * FROM xxxx WHERE ";         
    for (
    $i=0$i<count($arr_txt); $i++) {             
    if (
    $i 0) {$sql .= " AND "; }            
     
    $sql .= "(titolo LIKE '%" $arr_txt[$i] . "%' OR xxx LIKE '%" $arr_txt[$i] . "%')"; }         
    $sql .= " ORDER BY xxx_timestamp DESC";         
    $query mysql_query($sql$cn);         
    $quanti mysql_num_rows($query);         
    if (
    $quanti == 0) { ?> 


    Nessun risultato!</p> 
    <?}else {             
    for(
    $x=0$x<$quanti$x++){                 
    $rs mysql_fetch_row($query);               
    $xxx $rs[1];
    echo 
    $xxx;
    }         }     } 
    ?>
    fammi sapere se funziona meti i valori giusti al posto delle "xxx" se hai problemi ti posto il mio codice che attualmente uso.
    Peace.

  4. #4
    @overflow1993 grazie mille, con il tuo codice adesso sta sui 15-20 secondi, ma è sempre troppo. Sapete aiutarmi?

  5. #5
    Riprendendo dal codice di owerflow1993 potresti fare così
    Codice PHP:
    <?php
    if (isset ( $testo ) == false || $testo == "") {
        echo 
    "nessun risultato!";
    } else {
        echo 
    $testo;
    }
    if (isset ( 
    $testo ) == false || $testo == "") {
        
    ?>


    attenzione: Inserire una parola da cercare.</p>
    <?php
    } else {
        
    $arr_txt explode " "$testo );
        
    $sql "SELECT * FROM xxxx WHERE 1";
        
    $lunghezza count $arr_txt );
        foreach (
    $arr_txt as $testo
            
    $sql .= "AND (titolo LIKE '%$testo%' OR xxx LIKE '%$testo%')";
        
    $sql .= " ORDER BY xxx_timestamp DESC";
        
    $query mysql_query $sql$cn );
        
    $quanti mysql_num_rows $query );
        if (
    $quanti == 0) {
            
    ?>


    Nessun risultato!</p>
    <?php
        
    } else {
            for(
    $x 0$x $quanti$x ++) {
                
    $rs mysql_fetch_row $query );
                
    $xxx $rs [1];
                echo 
    $xxx;
            }
        }
    }
    ?>
    In questo modo ad ogni iterata sull'array delle stringhe risparmi un if e una chiamata alla funzione count(), ma di più non si può.
    CODENCODE \ Branding \ Design \ Marketing
    www.codencode.it

  6. #6
    Utente bannato
    Registrato dal
    Nov 2011
    Messaggi
    3
    [edit - no spam!]

  7. #7
    il foreach l'avevo già messo anche prima, adesso ho provato a sostituire
    codice:
    $quanti = mysql_num_rows($query) or die (mysql_error());
    	if($quanti == 0)
    	{
    		echo '
    
    Nessun risultato!</p>';
    	}
    	else
    	{
    		for($x=0; $x<$quanti; $x++)
    		{
    			$rs = mysql_fetch_array($query);
    			echo $rs[id].'
    ';
    		}
    	}
    con
    codice:
    while($rs=mysql_fetch_array($query,MYSQL_ASSOC))
      echo $rs[id].'
    ';
    in modo da togliere un if e un ciclo for, ma non c'è molta differenza.
    Non so proprio dove andare a sbattere la testa

  8. #8
    usa le novita del php5 ovvero usa la possibilita della riscrizione del codice in c lo trovi sul manuale del php5 di apogeo penso anche in rete se ti e troppo complesso strutturaa il codice ad oggetti.
    Peace.

  9. #9
    cercando in giro ho trovato la ricerca FULLTEXT di mysql ed è veramente molto veloce, quasi sempre sta sotto i 3 secondi.
    Il mio problema è che adesso la ricerca devo farla anche sulla tabella citta (collegata tramite id alla tabella utenti) ma con il FULLTEXT non so proprio come fare per dirgli di cercare su 2 tabelle, l'unica soluzione che ho trovato sarebbe di mettere oltre all'id anche il nome della città nella tabella utenti.
    Avete qualche soluzione migliore???

  10. #10
    posta il codice la query, la struttura delle tabelle e possiamo esserti molto piu utili cmq penso ci voglia un congiunzione tra tabelle

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.