-1

在 mp_cities 表 city_name 和 city_id 是字段

city_id        city
--------------------
  1            Chennai
  2            Bangalore
  3            Kerala

在配置文件表中

user_email         city_type 
------------------------------
abc@gmail.com      1,2,3     

我正在使用以下查询

SELECT city_name 
  FROM mp_cities 
 WHERE city_id IN (SELECT city_type 
                     FROM profile 
                     WHERE  user_email='abc@gmail.com')

此查询将导致 Chennai。我必须得到所有的城市

4

3 回答 3

4

你可以FIND_IN_SET()在 MySQL 中使用。

SELECT  a.*
FROM        mp_cities a
                INNER JOIN  profile  b
                    ON FIND_IN_SET(a.city_id, b.city_type)
WHERE   b.user_email = 'abc@gmail.com'

但到目前为止我能想到的最好的方法是正确地规范化表格。

mp_cities

  • city_id (PK)
  • 城市
  • 其他栏目

轮廓

  • user_id (PK)
  • 其他栏目

mp_cities _profile

  • city_id (FK)
  • user_id (FK)
于 2013-08-20T05:43:43.910 回答
3

profile如果表格如下所示,您将获得所需的结果:

user_email     city_type
------------------------
abc@gmail.com  1
abc@gmail.com  2
abc@gmail.com  3

也就是说,内部SELECT必须返回几行,每行都有一个数字,而不是一行用逗号分隔的一组数字。

于 2013-08-20T05:42:00.857 回答
1

尝试使用FIND_IN_SET()如下功能连接两个表:

SELECT c.*
  FROM mp_cities c
  JOIN profile p
    ON FIND_IN_SET(c.city_id,p.city_type) > 0;

看到这个 SQLFiddle

于 2013-08-20T05:43:54.600 回答