2010-04-16 27 views
0

考慮我有一個registartion表,並有現場prefLocationId,它包含了像珍惜這1,2,321,4和這麼多....我有一個表prefLocation它看起來像這樣如何在mysql中完成這項工作?

Id LocationName 
1 Chennai 
2 Mumbai 
3 Kolkatta 
4 Delhi 

和我要選擇用戶並顯示值的記錄像

Chennai,Mumbai,KolkattaMumbaiChennai,Delhi等等...

+1

有辦法做到這一點,但所有這些都很複雜。正確的解決方案是適當規範化數據,並將這些'prefLocationId'值存儲在一個單獨的表中(每行一個值)。這將使查詢變得微不足道。 – 2010-04-16 05:04:08

回答

2

它必須是表prefLocationId,不現場 然後你可以選擇像

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

我幾乎不想這樣做,但有一個答案。只是,它關於我可以想象的最糟糕的事情。你應該真的考慮Col Shrapnel的答案,並將你的值分解成一個單獨的表格。但對於完整起見:

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 

這將是比較你會得到什麼速度很慢,如果你拆registration.prefLocationId因爲有絕對沒有辦法讓這個使用任何索引。

相關問題