Help : afficher les résultats SQL pour AU MOINS un des mots

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Help : afficher les résultats SQL pour AU MOINS un des mots

Re: Help : afficher les résultats SQL pour AU MOINS un des mots

par Yosh » 06 nov. 2009, 17:14

Le problème de FULLTEXT me semble-t-il est qu'il faut un certain nombre de résultat correspondant pour pouvoir renvoyer quelque chose, non?

Re: Help : afficher les résultats SQL pour AU MOINS un des mots

par juuu » 06 nov. 2009, 17:01

ok donc voici le contenu de ma page ici : http://www.123camchat.com/fr/test.php?room=21
  <?php

mysql_connect("localhost", "***", "***");
mysql_select_db("mydb");
$reponse = mysql_query("SELECT * FROM room WHERE chat_group_id =2 AND room_id ='".mysql_real_escape_string($_GET[room])."'");
while ($donnees = mysql_fetch_array($reponse) )
{

    echo $donnees['name'];

   //ici ta deuxi&eacute;me requete avec match
   $sql = "SELECT room.*, MATCH (room.name) AGAINST (\"".mysql_real_escape_string($donnees['name'])."\")  FROM room WHERE MATCH (room.name) AGAINST (\"".mysql_real_escape_string($donnees['name'])."\") ";
   $reponse2    =    mysql_query($sql)or die(mysql_error());
   while($otherRomms = mysql_fetch_array($reponse2,MYSQL_ASSOC) ){
        echo $otherRooms['name']."<br>";
   }

}
mysql_close();
?>
je vois bien le 1er echo mais pas le 2e, donc ton code ne marche pas :(

Si vous n'avez pas d'autres solutions j'arrête la et je prend un dev... ça me coûtera moins cher que le temps passé :P
mais je trouve ça dommage si prêt du but, et cela me semblait pourtant simple :(

Merci bien

Re: Help : afficher les résultats SQL pour AU MOINS un des mots

par stopher » 06 nov. 2009, 16:48

Tu peux , l'avantage de Fulltext ( match, against ) est qu'il est plus rapide , et permet d'avoir une note sur la correspondance entre le mot recherché et les enregistrements retournés .

Re: Help : afficher les résultats SQL pour AU MOINS un des mots

par juuu » 06 nov. 2009, 16:39

@stopher : pourquoi ne pas faire un truc du genre :

une recherche WHERE name like %$donnees['name']%

mais 1 : je ne connais pas du tout la syntaxe pour l'écrire
et 2 : le LIKE retourne les salons EXACTEMENT pareil, or je veux AU MOINS un de mots pareils

:/

Re: Help : afficher les résultats SQL pour AU MOINS un des mots

par juuu » 06 nov. 2009, 16:28

oui oui mais c particulier, l'utilisateur n'est pas en root, par sécurité....

ton code marche bien, et plusieurs de mes codes aussi, j'arrive bien à me connecter et récupérer des infos, mais celui de Aureusms non, mais ce n'est pas important

Ce qui m'intéresse c'est de savoir pourquoi ton code me retourne le 1er echo (c'est-à-dire le name de la room) mais pas le 2nd... c'est-à-dire aucun name similaire :(

Re: Help : afficher les résultats SQL pour AU MOINS un des mots

par stopher » 06 nov. 2009, 16:22

Heu là , c'est un probléme de connexion à ta base de données ...
Access denied for user 'a23camch'@'localhost' (using password: NO) in /home/a23camch/www/fr/chat.php
es tu certains d'être bien connecté ?

Compléte
mysql_connect("localhost", "***", "***");
Comme ceci :
$link = mysql_connect("localhost", "mysql_user", "mysql_password")
    or die("Impossible de se connecter : " . mysql_error());
echo 'Connexion réussie';
En remplaçant mysql_user et mysql_password bien entendu ...

C'est assez étonnant que cette erreur arrive que maintenant ... :-k

Re: Help : afficher les résultats SQL pour AU MOINS un des mots

par juuu » 06 nov. 2009, 16:17

elle ne donne pas d'erreur, mais elle me donne QUE le 1er echo, le second ne donne rien
(je parle de ton code)
celui de Aureusms étant bugé au niveau syntaxe, et meme débuggé il m'affiche
Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'a23camch'@'localhost' (using password: NO) in /home/a23camch/www/fr/chat.php on line 110

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in /home/a23camch/www/fr/chat.php on line 110
21pas numeric
bref, tant pis pour les problème de surcharge sql, je préfère m'attarder sur ton code qui ne bug pas... mais il ne marche pas :(

Re: Help : afficher les résultats SQL pour AU MOINS un des mots

par stopher » 06 nov. 2009, 16:05

Maintenant que tu as changer ton champ en FULLTEXT , ta requête ( avec match ect ) ne fonctionne pas ?

Re: Help : afficher les résultats SQL pour AU MOINS un des mots

par juuu » 06 nov. 2009, 16:02

salut les gars
merci pour vos réponses

J'ai bien créer l'index dans phpmyadmin :

Code : Tout sélectionner

ALTER TABLE `room` DROP INDEX `name` , ADD FULLTEXT `name` ( `name` )
le résultat me donne le nom de la 1re room.... et rien d'autres
(alors que comme je le disais, j'ai pleinnnns de rooms qui porte au moins un des mots de la 1re) :(

je continue de chercher de mon côté.... (mais en vain)

Re: Help : afficher les résultats SQL pour AU MOINS un des mots

par Aureusms » 06 nov. 2009, 15:29

C'est du vécu malheureusement... :D
Je pense néanmoins que cela dois dépendre du type de base utilisée (innodb, myisam,...)

Re: Help : afficher les résultats SQL pour AU MOINS un des mots

par stopher » 06 nov. 2009, 15:24

@juuu :

bon , je pense que tu as toutes les clefs en main avec les réponses de Yosh et Aureusms

@Aureusms :
De plus des requêtes alors que la pile mysql n'est pas vide, cela alourdi la charge serveur : stocke d'abord tes variables dans un tableau temporaire puis ensuite, relance une requête.
Et bien merci pour l'info , je ne savais pas non plus .. :-)

Re: Help : afficher les résultats SQL pour AU MOINS un des mots

par Aureusms » 06 nov. 2009, 15:07

Bonjour à tous,

au code de stopher je rajouterai un test numeric (comme ta requete fais intervenir la supervariable $_GET) :
De plus des requêtes alors que la pile mysql n'est pas vide, cela alourdi la charge serveur : stocke d'abord tes variables dans un tableau temporaire puis ensuite, relance une requête.
<?php
$room = mysql_real_escape_string($_GET["room"]);
$tab_temp = array();
mysql_connect("localhost", "***", "***");
mysql_select_db("mydb");
$requete = "SELECT * FROM room WHERE chat_group_id =2 AND room_id ='".$room."'";
if (is_numeric($room))
{
  $reponse = mysql_query($requete);
  if (mysql_num_rows ($reponse) == 0)
     die ("pas de résultats");
  else
  {
    while ($donnees = mysql_fetch_assoc($reponse) )
    {
       $tab_temp = $donnees['name'];
    }
  }


  //ici ta deuxiéme requete avec match
  if (is_array($tab_temp) && !empty($tab_temp))
  {
    foreach ($tab_temp as $name)
    {
    $name = addslashes($name);
    $sql = "SELECT room.*, MATCH (room.name) AGAINST (\"".$name."\")  FROM room WHERE MATCH (room.name) AGAINST   (\"".$name."\") ";
       $reponse2    =    mysql_query($sql)or die(mysql_error());
       while($otherRomms = mysql_fetch_assoc ($reponse2) 
       {
            echo $otherRooms['name']."<br>";
       }
    }
  }
}
else
{
  echo "$_GET['room'] pas numeric";
}
mysql_close();
?>

Re: Help : afficher les résultats SQL pour AU MOINS un des mots

par Yosh » 06 nov. 2009, 14:37

C'est parceque dans ta base de données tu dois ajouter un index de type FULLTEXT,

si tu utilise PhpMyadmin, il te faut sélectionner la table cible puis en dessous de la structure de la base tu a un bloc Index, là il te faut Créer un index sur 1 colonne(s) de type FULLTEXT sur le champ cible.

Re: Help : afficher les résultats SQL pour AU MOINS un des mots

par juuu » 06 nov. 2009, 14:15

wow... ça c'est du codage.
J'ai rien compris non plus, mais j'ai carrément copier coller ton code et j'obtiens ça :

Mon SalonCan't find FULLTEXT index matching the column list

Pour te prouver que je fais pas mon teubé, j'ai quand même analyser ton code, réparé ton ) manquant, etc...
mais pour le resultat qui ne marche pas, je ne comprends pas...
Pourtant dans ma DB, j'ai beaucoup de room qui contiennent le mot "salon", or là, il ne m'en trouve aucun ! :/

edit : j'ai cherché la définition de "autocomplexion" mais je n'ai rien trouvé non plus :non:

Re: Help : afficher les résultats SQL pour AU MOINS un des mots

par stopher » 06 nov. 2009, 13:55

Dans u premier temps , tu n'es pas obligé de fermer ouvrir les tags php constamment ..

je dis ça , c'est plus pour l'aspect pratique et la lisibilité ..
<?php
mysql_connect("localhost", "***", "***");
mysql_select_db("mydb");
$reponse = mysql_query("SELECT * FROM room WHERE chat_group_id =2 AND room_id ='".mysql_real_escape_string($_GET[room])."'");
while ($donnees = mysql_fetch_array($reponse) )
{

    echo $donnees['name'];

   //ici ta deuxiéme requete avec match 
   $sql = "SELECT room.*, MATCH (room.name) AGAINST (\"".mysql_real_escape_string($donnees['name'])."\")  FROM room WHERE MATCH (room.name) AGAINST (\"".mysql_real_escape_string($donnees['name'])."\") ";
   $reponse2    =    mysql_query($sql)or die(mysql_error());
   while($otherRomms = mysql_fetch_array($reponse2,MYSQL_ASSOC){
        echo $otherRooms['name']."<br>";
   }

}
mysql_close();
?>

Voilà , un truc du genre .... ( c'est dans des exemple comme ça que l'on voit que l'on s'habitue vite à l'autocompléxion .. )


Good luck , ch ...