J'ai un champ COLORS (varchar(50))
dans ma table SHIRTS
qui contient une chaîne délimitée par des virgules telle que1,2,5,12,15,
. Chaque nombre représentant les couleurs disponibles.
Lors de l'exécution de la requête select * from shirts where colors like '%1%'
pour obtenir toutes les chemises rouges (couleur = 1), j'obtiens également les chemises dont la couleur est le gris (= 12) et l'orange (= 15).
Comment dois-je réécrire la requête de manière à sélectionner UNIQUEMENT la couleur 1 et non toutes les couleurs contenant le numéro 1?
Réponses:
La manière classique serait d'ajouter des virgules à gauche et à droite:
Mais find_in_set fonctionne également:
la source
FIND_IN_SET est votre ami dans ce cas
la source
Jetez un œil à la fonction FIND_IN_SET pour MySQL.
la source
Cela fonctionnera à coup sûr, et je l'ai essayé:
Essaie !!!
la source
Si l'ensemble de couleurs est plus ou moins fixe, le moyen le plus efficace et le plus lisible serait d'utiliser des constantes de chaîne dans votre application, puis d'utiliser le
SET
type de MySQL avecFIND_IN_SET('red',colors)
dans vos requêtes. Lors de l'utilisation duSET
type avec FIND_IN_SET , MySQL utilise un entier pour stocker toutes les valeurs et utilise une"and"
opération binaire pour vérifier la présence de valeurs, ce qui est bien plus efficace que de scanner une chaîne séparée par des virgules.Dans
SET('red','blue','green')
,'red'
serait stocké en interne en tant que1
,'blue'
serait stocké en interne en tant que2
et'green'
serait stocké en interne en tant que4
. La valeur'red,blue'
serait stockée sous la forme3
(1|2
) et'red,green'
sous la forme5
(1|4
).la source
Si vous utilisez MySQL, il existe une méthode REGEXP que vous pouvez utiliser ...
http://dev.mysql.com/doc/refman/5.1/en/regexp.html#operator_regexp
Alors vous utiliseriez:
la source
Vous devez en fait corriger le schéma de votre base de données de sorte que vous ayez trois tables:
Ensuite, si vous voulez trouver toutes les chemises rouges, vous feriez une requête comme:
la source
Travaille pour moi
la source
1. Pour MySQL:
2.Pour Postgres SQL:
Exemple
la source
Vous pouvez y parvenir en suivant la fonction.
Exécutez la requête suivante pour créer la fonction.
Et appelez cette fonction comme ça
la source
Toutes les réponses ne sont pas vraiment correctes, essayez ceci:
la source