2010-04-16 5 views
0

Considérez que j'ai une table de registartion et il y a champ prefLocationId et contient une valeur comme celui-ci 1,2,3, 2, 1,4 et tant .... Et j'ai une table prefLocation qui ressemble à ceComment faire cela dans mysql?

Id LocationName 
1 Chennai 
2 Mumbai 
3 Kolkatta 
4 Delhi 

et i veulent sélectionner ENREGISTRE des utilisateurs et présentent des valeurs comme

Chennai,Mumbai,Kolkatta, Mumbai, Chennai,Delhi et ainsi de suite ...

+1

Il existe des moyens de le faire, mais tous sont plutôt compliqués. La bonne solution consisterait à normaliser correctement vos données et à stocker ces valeurs 'prefLocationId' dans une table distincte (une valeur par ligne). Cela rendrait la requête triviale. –

Répondre

2

Il doit être la table prefLocationId, non champ et vous pouvez sélectionner quelque chose comme

SELECT pref.*,group_concat(prefLocation.name) 
FROM pref, prefLocationId, prefLocation 
WHERE pref.LocationId=prefLocationId.pref and prefLocation.id=prefLocationId.location 
GROUP BY pref.id 
0

Je ne veux pas presque faire cela, mais il y a une réponse. Seulement, c'est à propos de la pire chose que je puisse imaginer faire. Vous devriez vraiment considérer la réponse de Col. Shrapnel et diviser vos valeurs dans un tableau séparé. Mais pour être complet:

SELECT registration.*, GROUP_CONCAT(prefLocation.name) AS prefLocationNames 
    FROM registration 
    JOIN prefLocation ON FIND_IN_SET(prefLocation.Id, registration.prefLocationId) > 0 
GROUP BY registration.id 

Ce sera très lent par rapport à ce que vous obtiendriez si vous divisez registration.prefLocationId parce qu'il n'y a absolument aucun moyen pour cela d'utiliser les index.