Je sais que je peux utiliser IN (1,2,3) pour sélectionner des éléments d'une base de données SQL où leur valeur est 1, 2 ou 3, mais que faire si j'ai une valeur dans MYSQL qui est une chaîne, et est égal à '1,2,3' et je veux sélectionner cette valeur. Pour autant que je sais que je dois faire:Comment stocker et rechercher dans CSV en SQL?
SELECT whatever FROM wherever WHERE sqlvariable = '1' OR sqlvariable LIKE '1,%' OR `sqlvariable` LIKE '%,1,%' OR `sqlvariable` LIKE '%,1'
ce qui est bien si je veux simuler « IN » de sorte en sens inverse. Mais laisse dire que je veux sélectionner sqlvariable où il contient 1 ou 2, alors je dois le faire:
SELECT whatever FROM wherever WHERE sqlvariable = '1' OR sqlvariable LIKE '1,%' OR `sqlvariable` LIKE '%,1,%' OR `sqlvariable` LIKE '%,1' OR sqlvariable = '2' OR sqlvariable LIKE '2,%' OR `sqlvariable` LIKE '%,2,%' OR `sqlvariable` LIKE '%,2'
Maintenant, supposons que j'utilise PHP pour générer les requêtes ci-dessus et je suis à la recherche de trouver sqlvariable où il contient un 1 2 4 66 34 33 22 44 ou 992. Il faudra beaucoup de temps pour que cette requête s'exécute.
Je pourrais faire une implémentation au niveau du bit, mais alors je suis limité à seulement environ 60 éléments différents, ce qui n'est pas suffisant.
Existe-t-il un moyen plus rapide d'utiliser une requête CSV comme ci-dessus en SQL? Je suppose que c'est un peu comme IN() mais en sens inverse.
J'espère que vous ne stockez pas réellement CSV chaînes dans votre base de données SQL! Et si vous êtes, j'espère que vous pouvez convaincre votre patron ou DBA d'être un peu plus intelligent et * analyser * le fichier .csv avant de le * stocker *. – paulsm4
Je n'ai pas de patron, je suis juste un Canadien qui essaie d'apprendre monsieur: P Merci pour vos commentaires cependant, j'essaie en effet d'apprendre une meilleure approche pour stocker des tableaux dans des bases de données. Je sais que les forums vBulletin stockent par exemple des informations sur les groupes de permissions sous la forme d'une chaîne CSV. Par exemple, une variable d'autorisations sur un forum vbulletin ressemble à «1,2,3» où chaque nombre représente un groupe d'autorisations différent. Comment devrait-il être mieux fait? – Macmee