par
zeus » 20 juin 2007, 10:45
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

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.
Tu as ce qu'on appelle un problème de modélisation de ta base.
En effet, un champ ne [u]devrait[/u] 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]WHERE
champ1 LIKE '%val1%'
OR champ1 LIKE '%val2%'
OR champ1 LIKE '%val3%'[/code]
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.