Page 1 sur 1

Recherche champs MySql

Posté : 20 juin 2007, 10:31
par kira371
Bonjour,

Soit une base MySql avec une table contenant un champs varchar.
Ce champs peut contenir des valeurs sous la forme "val1, val2, val3".

Lors d'une requete pour une recherche, comment faire pour que la valeur passée en paramètre, recherche dans ce champs "val1 ou val2 ou val3" ?

Merci de votre aide.

@+ tard

Posté : 20 juin 2007, 10:35
par zeus
simplement en traduisant le français en SQL :lol:

Code : Tout sélectionner

WHERE champ1 LIKE 'taValeur' OR champ2 LIKE 'taValeur' OR champ3 LIKE 'taValeur'
;)

Posté : 20 juin 2007, 10:39
par Invité
simplement en traduisant le français en SQL :lol:

Code : Tout sélectionner

WHERE champ1 LIKE 'taValeur' OR champ2 LIKE 'taValeur' OR champ3 LIKE 'taValeur'
;)
Merci,

Je me suis peut-être mal exprimé, mais c'est le même champs qui peut contenir n valeurs séparés par des virgules. Est-ce toujours possible ta solution ?

Merci[/code]

Posté : 20 juin 2007, 10:45
par zeus
Tu as ce qu'on appelle un problème de modélisation de ta base.
En effet, un champ ne devrait jamais contenir plusieurs valeurs.

Pour chercher si un champ contient plusieurs valeur, il existe une syntaxe mais elle pose de gros soucis de performance :

Code : Tout sélectionner

WHERE champ1 LIKE '%val1%' OR champ1 LIKE '%val2%' OR champ1 LIKE '%val3%'
Outre le fait que l'utilisation de LIKE '%...%' empêche l'utilisation de tout index sur ce champ, cette condition lance 3 fois ce genre de LIKE sur un seul et même champ et je suis bien incapable de te dire si le moteur de MySQL est capable d'optimiser ce genre de clause :-k
Même en passant par des expressions régulière, je ne vois pas une solution viable et performante.

Au début, tu ne vas pas voir de soucis mais dès que ta table va grossir, tu va plomber tes performances.

Posté : 20 juin 2007, 10:50
par Invité
Tu as ce qu'on appelle un problème de modélisation de ta base.
En effet, un champ ne devrait jamais contenir plusieurs valeurs.

Pour chercher si un champ contient plusieurs valeur, il existe une syntaxe mais elle pose de gros soucis de performance :

Code : Tout sélectionner

WHERE champ1 LIKE '%val1%' OR champ1 LIKE '%val2%' OR champ1 LIKE '%val3%'
Outre le fait que l'utilisation de LIKE '%...%' empêche l'utilisation de tout index sur ce champ, cette condition lance 3 fois ce genre de LIKE sur un seul et même champ et je suis bien incapable de te dire si le moteur de MySQL est capable d'optimiser ce genre de clause :-k
Même en passant par des expressions régulière, je ne vois pas une solution viable et performante.


Au début, tu ne vas pas voir de soucis mais dès que ta table va grossir, tu va plomber tes performances.
Vi, c'est bien ce que je pensais.
Je croyais qu'il y avait une directive ou une commande qui permettrait de faire ça plus facilement.
Je te rassure, normalement ma base n'est pas comme ça, je suis en période de test pour voir ce que ça pourrait donner.
Merci pour tes réponses.