2011-05-03 2 views
0

J'ai un site Web de type de moteur de recherche. Il prend l'entrée des utilisateurs, stocke la requête en $ q, explose la requête et recherche la base de données. Il affiche ensuite les résultats avec le nom et l'adresse Web de chaque résultat. Par exemple, si je cherchais "programmation informatique" ... Stack Overflow, stackoverflow.com serait mon résultat. Cependant, il affiche deux fois. (une fois pour l'ordinateur, et une fois pour la programmation.)array_unique question

J'ai essayé de résoudre ceci avec la fonction array_unique, et cela ne fonctionne pas.

toute aide serait appréciée.

// trim whitespace 

$trimmed = trim($q); 
// seperate key-phrases 
$trimmed_array = explode(" ", $trimmed); 

// remove duplicates 

$clean_array = array_unique($trimmed_array); 

//query dataabase 
foreach ($clean_array as $trimm){ 
    $query = mysql_query("SELECT * FROM forumlist WHERE `keys` LIKE '%" . mysql_real_escape_string($trimm) . "%' ORDER BY rating DESC, total_ratings DESC") or die(mysql_error()); 

Merci!

+0

u besoin d'exécuter array_unique sur les résultats de db –

+0

Vous pouvez DISTINCT vos URL – JohnP

Répondre

2
//query dataabase 
$query = 'SELECT * FROM forumlist '; 
$where = array(); 
foreach ($clean_array as $trimm){ 
    $where[] = " `keys` LIKE '%" . mysql_real_escape_string($trimm) . "%' "; 
} 

if(!empty($where)){ 
    $query .= " WHERE ". implode(' OR ', $where); 
} 
$query .= " ORDER BY rating DESC, total_ratings DESC"; 
$result = mysql_query($query) or die(mysql_error()); 
+0

qui fonctionne. Il se débarrasse des résultats en double. Cependant, j'ai maintenant cette erreur: Vous avez une erreur dans votre syntaxe SQL; vérifiez le manuel qui correspond à votre version du serveur MySQL pour la bonne syntaxe à utiliser près de 'WHERE 'keys' LIKE'% computer% 'OR' keys' LIKE'% programming% 'COMMANDEZ par ratin' à la ligne 1. Merci pour votre aide –

+0

s'il vous plaît montrez-moi toute la requête. en utilisant echo $ query, avant mysql_query() – Gaurav

+0

C'est quelque chose avec le second terme de recherche. J'ai essayé la requête en tant que "programmation informatique" et ceci est l'instruction d'écho: SELECT * FROM liste de forum WHERE 'keys' LIKE '% computer%' ORDER BY évaluation DESC, total_ratings DESC. Les liens corrects qui devraient revenir de "ordinateur" reviennent, mais pas les liens de "programmation". –

Questions connexes