[PHP/SQL] Problem Moteur de Recherche

Résolu
Digit@lChord Messages postés 129 Date d'inscription   Statut Membre Dernière intervention   -  
Digit@lChord Messages postés 129 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
Je cherche a faire un moteur de recherche qui affiche tout les résultat dans un tableau.
Donc apres avoir vu la mise en page et les differente caracteristiques de ce tableau sa ma donné sa :

$keyword = $_GET['search'];   

$query = mysql_query("SELECT JR_main.ID,JR_main.IOS,JR_main.TYPE,JR_main.STATUS,JR_devices.IPH,JR_devices.IPH3G,JR_devices.IPH3GS,JR_devices.IPH4G,JR_devices.IPH4GS,JR_devices.IPOD1G,JR_devices.IPOD2G,JR_devices.IPOD3G,JR_devices.IPOD4G,JR_devices.IPAD1G,JR_devices.IPAD2G FROM JR_main,JR_devices WHERE JR_main.ID = JR_devices.ID AND type LIKE '%$keyword%' OR status LIKE '%$keyword%' OR ios LIKE '%$keyword%' ORDER BY id DESC") or die (mysql_error()); 
$nb_resultats = mysql_num_rows($query);  
while($data = mysql_fetch_array($query)) { 
  echo '<tr class="'; 
  echo ($c<0) ? 0 : ($c++ % 2 == 1) ? odd : even; 
  if($data['STATUS'] == "Coming Soon") { echo'soon">'; } else { echo'" onclick="DoNav(\'device.php?id='.$data['ID'].'\');">';}; 
  echo '<td class="osimg">'; 
  echo '<img src="img/iOS.png" class="icon"></td>'; 
  echo '<td class="ios"><b>'.$data['IOS'].'</b></td>';  
  echo '<td class="compatibility"><div class="info">'; 
  echo '<img src="img/dyna_2/iph1g'.$data['IPH'].'.png"><img src="img/dyna_2/iph3g'.$data['IPH3G'].'.png"><img src="img/dyna_2/iph3gs'.$data['IPH3GS'].'.png"><img src="img/dyna_2/iph4g'.$data['IPH4G'].'.png"><img src="img/dyna_2/iph4gs'.$data['IPH4GS'].'.png"><img src="img/dyna_2/ipod1g'.$data['IPOD1G'].'.png"><img src="img/dyna_2/ipod2g'.$data['IPOD2G'].'.png"><img src="img/dyna_2/ipod3g'.$data['IPOD3G'].'.png"><img src="img/dyna_2/ipod4g'.$data['IPOD4G'].'.png"><img src="img/dyna_2/ipad1g'.$data['IPAD1G'].'.png"><img src="img/dyna_2/ipad2g'.$data['IPAD2G'].'.png">'; 
  echo '</div></td>'; 
  echo '<td class="type"><b><font color="'; 
  if($data['TYPE'] == "Warning") { echo'#ff0000'; } else { }; 
  echo '">'.$data['TYPE'].'</font></b></td>'; 
  echo '<td class="status"><b><div class="'.$data['STATUS'].'">'.$data['STATUS'].'</div></b></td></tr>';  
} 
mysql_free_result ($query); 


Sa fonctione, le ou les résultats s'affiche avec la mise en page demandé MAIS le probleme c'est qu'il m'affiche 35 lignes (la totalitée des lignes des 2 tables JR_main et JR_devices) avec les même valeurs dans chaque lignes (valeur de la ligne que je recherche).

Alors que normalement il est censé m'afficher seulement le nombre de lignes comportant mon mot clé !!

Je pense que le probleme ce situe au niveau de la ligne "
WHERE JR_main.ID = JR_devices.ID AND type LIKE '%$keyword%' OR status LIKE '%$keyword%' OR ios LIKE '%$keyword%' ORDER BY id DESC
")" mais je sais pas du tout le reformuler autrement.

Voila voila, j'espere que quelqu'un saura m'aider la dessus, si vous voyez quelque chose qui va pas sur ce code dites le moi parceque moi je ne vois strictement aucuns problemes.

Merci d'avance..

2 réponses

maka54 Messages postés 698 Date d'inscription   Statut Membre Dernière intervention   80
 
il faut faire un jointure

à la place de :
FROM JR_main,JR_devices WHERE JR_main.ID = JR_devices.ID


tu mets :

FROM JR_main INNER JOIN JR_devices ON JR_main.ID = JR_devices.ID
0
Digit@lChord Messages postés 129 Date d'inscription   Statut Membre Dernière intervention   8
 
Merci, Sa ma l'air bon sauf que j'ai sa :

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 'FROM JR_main INNER JOIN JR_devices ON JR_main.ID = JR_devices.ID WHERE JR_main.t' at line 1
0
maka54 Messages postés 698 Date d'inscription   Statut Membre Dernière intervention   80
 
mets ta requete modifiée en entiere pour voir qu'est ce qui ne va pas
0
Digit@lChord Messages postés 129 Date d'inscription   Statut Membre Dernière intervention   8
 
$query = mysql_query("SELECT JR_main.ID,JR_main.IOS,JR_main.TYPE,JR_main.STATUS,JR_devices.IPH,JR_devices.IPH3G,JR_devices.IPH3GS,JR_devices.IPH4G,JR_devices.IPH4GS,JR_devices.IPOD1G,JR_devices.IPOD2G,JR_devices.IPOD3G,JR_devices.IPOD4G,JR_devices.IPAD1G,JR_devices.IPAD2G FROM JR_main,JR_devices FROM JR_main INNER JOIN JR_devices ON JR_main.ID = JR_devices.ID WHERE JR_main.type LIKE '%$keyword%' OR JR_main.status LIKE '%$keyword%' OR JR_main.ios LIKE '%$keyword%' ORDER BY id DESC") or die (mysql_error());
0
maka54 Messages postés 698 Date d'inscription   Statut Membre Dernière intervention   80
 
le problème est
JR_main.TYPE


premièrement, type est un mot reservé de sql, pour éviter des soucies je te conseille de mettre des quotes autour (les quotes en sql, c'est alt Gr + 7)

ensuite, à un endroit type est en majuscule et par la suite , il est en miniscule

idem pour ios, id , status et peut être d'autre, fais attention de respecter la casse

autre chose, tu fais un order by id, mais tu as plusieurs id dans tes tables, tu auras un message d'erreur car il ne saura pas de quel id tu parles
0
Digit@lChord Messages postés 129 Date d'inscription   Statut Membre Dernière intervention   8
 
Merci de ton aide je vais regarder tout sa :) (j'ai mis des quotes SQL, même erreur :s)
Ah et au depart j'avais fait la requete sans la recherche et sa fonctionnais tres bien :

$sql = 'SELECT JR_main.ID,JR_main.IOS,JR_main.TYPE,JR_main.STATUS,JR_devices.IPH,JR_devices.IPH3G,JR_devices.IPH3GS,JR_devices.IPH4G,JR_devices.IPH4GS,JR_devices.IPOD1G,JR_devices.IPOD2G,JR_devices.IPOD3G,JR_devices.IPOD4G,JR_devices.IPAD1G,JR_devices.IPAD2G FROM JR_main,JR_devices WHERE JR_main.ID = JR_devices.ID ORDER BY id DESC';  


Et dans cette requete le ORDER BY id DESC fonctionne.

Bref au cas ou j'ai trouvé une autre technique moins propre mais qui fonctionne :P
0