2010-01-25 11 views
1

Il y a une requête:Comment convertir un résultat MySQL en chaîne?

SELECT blalist FROM blatable WHERE blafield=714 

qui retourne une chaîne qui ressemble à: "2,12,29,714,543,1719". Et il y a une autre requête:

SELECT userid, name, surname, creditcardnum, items 
    FROM stolencards WHERE userid IN 
    (SELECT blalist FROM blatable WHERE blafield=714) 

Maintenant, cela ne fonctionne pas.
J'ai seulement réussi à le faire fonctionner en exécutant ces requêtes séparément. Que dois-je faire pour le conserver dans une seule requête?

+0

Dans MySQL, il n'y a pas de fonction 'explode'. Allez avec l'instruction '@Tatu Ulmanen'. – hsz

Répondre

4

Vous ne devriez jamais stocker plus d'une valeur dans une cellule. Chaque valeur dans blatable devrait être dans sa propre rangée, alors votre clause IN fonctionnerait comme un charme. Jetez un oeil à la normalisation de la base de données et en particulier au First normal form sur la façon dont vos tables doivent être conçues. Si vous avez toutes les valeurs dans une cellule, une comparaison IN entraîne la comparaison de tous les ID utilisateur à la chaîne "2,12,29,714,543,1719", ce qui ne correspondra évidemment pas. Votre requête ressemble à ceci:

...FROM stolencards WHERE userid IN ("2,12,29,714,543,1719") 
0

Vérifiez que le type de données de blalist et userid est le même, ou blalist renvoie vraiment userid?

0

Si vous avez spécifié les types de données correctes et pk et les relations fk essayez ceci:

SELECT s.userid, s.name, s.surname, s.creditcardnum, s.items 
FROM stolencards s inner join blatable b on s.userid = b.blafield 
where b.blafield = 714