如何在mysql中实现这一点?

如何在mysql中实现这一点?,mysql,select,Mysql,Select,假设我有一个registartion表,其中有一个字段prefLocationId,它包含这样的值1,2,3,2,1,4,等等。。。。我有一个表prefLocation,看起来像这样 Id LocationName 1 Chennai 2 Mumbai 3 Kolkatta 4 Delhi 我想选择用户记录并显示如下值 钦奈,孟买,加尔各答,孟买,钦奈,德里等等…必须是表格预定位ID,而不是字段 然后你可以选择像 SELECT pref.*,group_concat(prefLocat

假设我有一个registartion表,其中有一个字段
prefLocationId
,它包含这样的值
1,2,3
2
1,4
,等等。。。。我有一个表
prefLocation
,看起来像这样

Id LocationName
1  Chennai
2  Mumbai
3  Kolkatta
4  Delhi
我想选择用户记录并显示如下值


钦奈,孟买,加尔各答
孟买
钦奈,德里
等等…

必须是表格预定位ID,而不是字段 然后你可以选择像

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

我几乎不想这样做,但有一个答案。只是,这是我能想象到的最糟糕的事情。你应该认真考虑弹片的答案,把你的价值分成一个单独的表格。但为了完整起见:

  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
相比,这将非常缓慢,因为这绝对无法使用任何索引。

有很多方法可以做到这一点,但所有方法都相当复杂。正确的解决方案是正确地规范化数据,并将这些
prefLocationId
值存储在单独的表中(每行一个值)。这将使查询变得微不足道。