2016-09-14 1 views
1

Il y a une table:recherche Mysql dans la chaîne concatinated

CREATE TABLE n_dummy (
    id int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `values` varchar(255) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM; 

INSERT INTO `n_dummy` (id, `values`) VALUES 
(2, '2,10'), 
(10, '2,10') 
(3, '7,3'); 

ressembler à ceci:

id | values 
----------- 
2 | 2,10 
10 | 2,10 
3 | 7,3 

Fiddle included.

La première colonne est l'entier à rechercher dans la chaîne de values colonne .

Remarque: L'exemple est trop simplifié et semble stupide. La structure de la table de refactoring n'est pas le chemin. Seule requête sql avec fonctions et procédures standard.

Je souhaite rechercher une valeur entière dans une chaîne, concaténée à partir d'entiers avec le séparateur ,.

Je MySQL attend pour ce faire avec IN opérateur: SELECT id DE n_dummy WHERE id IN (values); Le résultat serait 2, 10 et 3. Mais MySQL renvoie seulement 2, la deuxième et d'autres valeurs ne sont pas consultables avec l'opérateur IN avec une chaîne. Comment rechercher un entier dans une chaîne concaténée à l'aide de routines sql-query et prebuild?

+1

fait que, dans la base de données relationnelle, 'semble stupid'; D'accord. – Ejaz

+0

La question est une version trop simplifiée de la très grande requête (%), qui consiste en un énorme nombre de sous-requêtes, donc les tables réelles sont créées dynamiquement, pas avec une instruction d'insertion. – userlond

+0

Le but principal de la question pour moi est de savoir, comment trouver des entiers créés dynamiquement concaténés avec séparateur chaîne (il est formé via la fonction 'CONCAT_WS' et de nombreux opérateurs' CASE', pas sql-query plain) – userlond

Répondre

2

essayer frère

SELECT * FROM `n_dummy` WHERE concat(',',`values`,',') LIKE concat('%',',',`id`,',','%') 
+0

Génial, ça fait Son boulot, merci! – userlond