Recherche de texte

jobijobar Messages postés 4 Date d'inscription samedi 21 juin 2008 Statut Membre Dernière intervention 29 juin 2008 - 21 juin 2008 à 15:42
Farfadh Messages postés 68 Date d'inscription dimanche 1 avril 2007 Statut Membre Dernière intervention 7 juillet 2008 - 29 juin 2008 à 17:31
Bonjour à tous,

j'ai un problème lors de l'execution d'un requete.

Table t1 : id, text1, text2, text3, text4, text5
Table t2 : id, id2, field1, field2, field3, field4, field5

La requete:

SELECT t1.*, t3.* FROM t1 LEFT JOIN (SELECT * FROM t2 WHERE id2='123') AS t3 ON t1.id=t3.id MATCH(t1.text1, t1.text2) AGAINST ('+toto' IN BOOLEAN MODE)
me renvoie x éléments (disons qu'elle retourne ce que j'attends)

mais la requete:
SELECT t1.*, t3.* FROM t1 LEFT JOIN (SELECT *
FROM t2 WHERE id2='123') AS t3 ON t1.id=t3.id MATCH(t1.text1, t1.text2, t3.field1, t3.field2)
AGAINST ('+toto' IN BOOLEAN MODE)

ne me renvoie jamais rien alors qu'elle devrait renvoyer au-moins autant d'éléments que la 1ère non ???

Vous allez me dire 2 choses:
<ol><li>"NON"   bein je sais puisque si elle devait renvoyer au-moins autant d'éléments que la 1ère elle le ferait
</li><li>Que ma requete n'est pas belle avec cette table temporaire créée</li></ol>D'une part je suis d'accord avec vous: cette requete n'est pas belle.

Le problème c'est que je suis en train de la modifier mais ce n'est pas la seule de ce genre à modifier et pour l'instant j'ai besoin de corriger cette satanée requete et de faire fonctionner MATCH conformément à mes attentes.

J'ai donc besoin d'un gros coup de main (pas dans la figure hein ?!)

Merci d'avance

3 réponses

Farfadh Messages postés 68 Date d'inscription dimanche 1 avril 2007 Statut Membre Dernière intervention 7 juillet 2008 4
29 juin 2008 à 05:16
Si ta requête n'est pas belle, ce n'est pas entièrement de ta faute, mais celle de SQL qui ne permet pas d'enregistrer le résultat d'une requête dans une variable et de faire quelque chose de plus léger comme :
SET @resultat= ( SELECT * FROMtable);
SELECT * FROM@resultat ASalias;

Sinon je crois que tu as oublié quelque chose dans la requête, sauf erreur de ma part. MATCH est une fonction de comparaison de texte, pas un mot clé. Donc il manque quelque chose dans la structure de ta requête entre la clause ON et cette fonction.

Cas de figure ON ... AND MATCH ... : j'espère que ce n'est pas ça que tu as fait, parce qu'on ne doit pas utiliser la clause ON pour sélectionner des lignes, et il serait très probable que l'erreur vienne de là.

Cas de figure ON ... WHERE MATCH ... : là, le mauvais comportement de ta requête serait plus énigmatique, mais j'attend de savoir ce que tu as fait pour chercher davantage.

Sinon, ne peux-tu pas formuler ta requête de la manière suivante, et est-ce que ça résoud quelque chose, c'est équivalent, ou ça empire encore la situation ?
SELECT t1.*, t3.*FROMt1 LEFT JOINt2 ONt1.id = t2.id WHEREt2.id2= '123' AND MATCH...
0
jobijobar Messages postés 4 Date d'inscription samedi 21 juin 2008 Statut Membre Dernière intervention 29 juin 2008
29 juin 2008 à 12:25
Merci Farfadh pour ta réponse,

c'est vrai que je n'ai pas été très clair (c'est souvent comme ça quand on veut expliquer simplement quelque chose qui nous parait clair )

en fait la requête que j'utilise ressemble plus à celle que tu me proposes, sauf que je dois aussi récupérer les lignes NULL de t2 puisque si tu veux t2 est un table de commentaire d'utilisateurs sur t1 donc un utilisateur donnée peut avoir ou ne pas avoir de commentaire dans t2.
Donc ça serait plutot SELECT t1.*, t3.* FROM t1 LEFT JOIN t2 ON t1.idt2.id WHERE (t2.id2 '123' ORt2.idIS NULL)AND MATCH(t2.conf, t2.comm) AGAINST ('+recherche'IN BOOLEAN MODE)

Merci vraiment de m'aider c'est super sympa !
Bonne journée
0
Farfadh Messages postés 68 Date d'inscription dimanche 1 avril 2007 Statut Membre Dernière intervention 7 juillet 2008 4
29 juin 2008 à 17:31
Donc tu aimerais récupérer les enregistrements de t1 même quand il n'y a pas de correspondance dans t2 ? Je n'utilise pas beaucoup les jointures. Le code que tu as donné fonctionne-t'il ? Normallement selon le manuel de MySQL, cela devrait.

Est-ce que la requête marche mieux qu'avant ou as-tu le même problème de recherche qu'avant ?

PS : dans nos requêtes on a SELECT t1.*, t3.* mais il faut bien sûr comprendre SELECT t1.*, t2.* sinon ça n'a pas beaucoup de sens.
0
Rejoignez-nous