PDA

Afficher la version complète : SVP pour m'aider sur une requete SQL...



Nico02
03/03/2007, 19h45
Bonjour à tous,
voilà je galère pour la mise en place d'une recherche full-text.
Si je remplace ma vieille requete :
$sql="SELECT id, titre, description, date, fond, ref FROM refs_tbl WHERE titre LIKE '%$titre%' AND description LIKE '$description'";

par

$sql="SELECT id, titre, description, date, fond, ref FROM refs_tbl WHERE MATCH(titre, description) AGAINST ('$titre')";

la suite du code est :

$resultat=mysql_query ($sql, $connexion);
$oui=mysql_fetch_row($resultat);
if ($oui)
{
while ($docs=mysql_fetch_object ($resultat))
{ echo
[... bref ça affiche]

ça ne fonctionne pas ! sachant qu'avec le premiere requete ça fonctionne.
Je ne comprends pas pourquoi :-(

PS : je débute ;-)

Merci pour vos suggestions !

chamaeleo
03/03/2007, 23h19
je ne vois rien d'anormal pour le moment (je ne suis un pro non plus)
Regarde sur: Nexen.net (http://www.nexen.net/index.php?option=com_nexen_v2&Itemid=234&lang=FR&nexen_url_type=intern&nexen_path=scripts%252Findex.php%253Forder%253D34% 2526p%253D6)
Il y a quelques scripts et exemples.

Carnaby
03/03/2007, 23h39
C'est pas un problème de syntaxe, elle est correcte (même si je sais pas si ça retournera éxactement ce que tu cherche).

Je pense que ça vient plutot des propriété de ta table SQL.
Pour utiliser MATCH () AGAINST () il faut que l'indexage FULLTEXT soit activé sur les colonnes ou tu désire faire ta recherche sinon tu te retrouve avec une erreur SQL 1191 .

Pour changer modifier les paramétrage tu peux utiliser une commande SQL du type

ALTER TABLE `nom_table` ADD FULLTEXT (`nom_colonne`)
ou plus simplement si tu as accès a phpmyadmin tu affiche la table et tu clique sur fulltext (ou "texte entier" en vf) pour les colonnes désiré.

EDIT: a puis en plus tu veux chercher sur plusieur colonne simultanément, donc 2 chose soit tu utilise plusieur index avec des OR soit tu crée un index unique couvrant l'ensemble des colonne concerné.
Par exemple

ALTER TABLE `nom_table` ADD FULLTEXT (`nom_colonne1`,`nom_colonne2`)

Nico02
04/03/2007, 09h57
Salut,

Merci pour vos réponses.
Il y a bien un index fulltext, que j'ai d'ailleurs réduit pour essayer de localiser l'erreur à une seule colonne.

Si je poste directement la requete dans phpmyadmin, j'obtiens parfois une réponse... tout dépend du mot recherché ; je pense déjà qu'il y a un soucis avec le nombre d'occurences (si trop => filtrage).

Cependant, je ne comprends pas pouquoi j'obtiens une erreur "Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\wamp\www\Recherche.php" dans mon fichier.

S'il n'y a aucune réponse, on devrait avoir une valeur 0 ? Si des résultats, une autre ?

Je patauge http://www.alionet.org/style_emoticons/<#EMO_DIR#>/sad.gif

PS : ce que je recherche, c'est juste qu'on me renvoie un numéro de ligne, car à partir de ça j'affiche les valeurs qui m'interressent.
Merci pour vos conseils !
@+
Nico

Carnaby
04/03/2007, 12h54
Le warning c'est pas bloquant et quand il n'y a pas de réponses c'est pas une valeur 0 qu'on obtient mais bien une valeur null.

Pour éviter que les warning s'affiche tu peux toujours préfixer ta fonction avec "@" si tu est sur qu'elle remplit bien son rôle

while ($docs=@mysql_fetch_object ($resultat))

Nico02
04/03/2007, 13h18
Le warning c'est pas bloquant et quand il n'y a pas de réponses c'est pas une valeur 0 qu'on obtient mais bien une valeur null.

Pour éviter que les warning s'affiche tu peux toujours préfixer ta fonction avec "@" si tu est sur qu'elle remplit bien son rôle

while ($docs=@mysql_fetch_object ($resultat))[/b]


Ah ! ça je ne le savais pas ! très bien, je vois à ça.
MERCI http://www.alionet.org/style_emoticons/<#EMO_DIR#>/smile.gif