adn Posté 19 Octobre 2005 Posté 19 Octobre 2005 (modifié) Bonsoir Alors je cherche le meilleur moyen pour faire la requête suivante: J'ai une liste de mot-clés séparés par des virgules et je voudrais retrouver toutes les lignes de ma table pour lesquelles il y a au moins une intersection avec la valeur d'une de mes colonnes. Un exemple, ce sera plus simple liste de mot-clés recherchés : (1, 2, 3, 4) Dans ma table mySQL j'ai: col1 col2line1 toto 2, 3 line2 tutu 1, 5, 6line3 tata 7 Y a-t-il moyen de récupérer line1 et line2 en une seule requête ? SELECT col1, col2FROM mytableWHERE xxxx Modifié 19 Octobre 2005 par adn
Portekoi Posté 19 Octobre 2005 Posté 19 Octobre 2005 Bonsoir, Tu peux utiliser le 'In' : SELECT col1, col2 FROM mytable WHERE Col2 in ("1, 2, 3","1, 2") Si tu n'avais qu'un chiffre et non un suite en col2, tu pourrais le faire ainsi : SELECT col1, col2 FROM mytable WHERE col2 in (1, 2, 3, 4) Portekoi
adn Posté 20 Octobre 2005 Auteur Posté 20 Octobre 2005 (modifié) Bonsoir, Tu peux utiliser le 'In' : SELECT col1, col2 FROM mytable WHERE Col2 in ("1, 2, 3","1, 2") Merci pour ta réponse, je connaissais pas IN et c'est une bonne piste. Cependant je ne comprends pas ton premier exemple qui a mon sens ne rend pas line1 et line2. Je comprends qu'a gauche du IN du doit avoir une seule valeur, du coup il faudrait faire une boucle sur la liste des mot-clés recherchés: Pour tous les mots-clésFaire SELECT col1, col2 FROM mytable WHERE mot-clés[i] IN col2fait Pas très performant.... Modifié 20 Octobre 2005 par adn
Portekoi Posté 20 Octobre 2005 Posté 20 Octobre 2005 Non justement. Tu construis ta chaine en amont de ta requete. Tu fais ta boucle for et en sortie tu obtiens par exemple "1, 5, 6, 9, 16" Cette chaine peut etre issue d'un split ou autre.... Ensuite tu fais ta requete une seule fois avec le " in ($ma_variable_construite) "
adn Posté 20 Octobre 2005 Auteur Posté 20 Octobre 2005 Re, Je pense que je commence à comprendre. Ta suggestion est de creer la liste des combinaisons possible, c'est çà ? Et ensuite de faire la requête.
adn Posté 20 Octobre 2005 Auteur Posté 20 Octobre 2005 OK pigé, merci. Bon je vais m'arranger pour que l'ordre soit toujours le même sinon la combinatoire augmente considérablement !
Portekoi Posté 20 Octobre 2005 Posté 20 Octobre 2005 Tu peux aussi le faire en 3 tables : La table mot clé La table des numéros (1, 2, 3, 4) La table mot clé <-> numéros Je vois pas trop ton schéma de base donc je ne me rends pas bien compte A toi de voir Portekoi
Dan Posté 20 Octobre 2005 Posté 20 Octobre 2005 Salut Adn, Le type de requête que tu fais démontre bien que tu gagnerais à utiliser une table croisée. En reprenant ton exemple, il suffirait d'une table avec un id et un mot clé. Par exemple: id mot clé1 11 22 42 52 12 dit que l'item numéro 1 a les mots clés 1 et 2 et que l'item numéro 2 a les mots clés 4, 5 et 12. Comme ça tu ne sera plus ennuyé avec le nombre de mots clés maxi pour un item, de 0 à ... (sans limite) Cela te permet aussi de faire des recherches sur "tous les mots clés de l'item X", ou "tous les items qui ont le mot clé Y". En mettant des index sur ces deux champs, ce sera extrèmement rapide. Dan
adn Posté 20 Octobre 2005 Auteur Posté 20 Octobre 2005 Oui Dan C'est justement ce que je viens de finir de faire avant de venir faire une pause sur le hub Merci à tous les deux pour votre aide.
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant