如何使用从MySQL中拉出逗号分隔值的连接

时间:2013-12-23 09:10:24

标签: mysql sql select join find-in-set

我有桌子tbl_restaurant(name,cuisine_id,....)和tbl_cuisine(cuisine_id,cuisine_name)

在tbl_restaurant中,cuisine_id字段包含逗号(,)分隔值,如(3,6,9,20,31) 当我尝试使用join来提取cuisine_name时,在上面的情况下只需要第一个id(即:3)。 我有一个问题:

SELECT tbl_restaurant.name, tbl_restaurant.cuisine_id, tbl_cuisine.cuisine_id,
tbl_cuisine.cuisine_name
FROM tbl_restaurant
LEFT JOIN tbl_cuisine ON tbl_restaurant.cuisine_id = tbl_cuisine.cuisine_id
WHERE tbl_restaurant.published =1
AND tbl_restaurant.id =$id

在使用join之前我应该​​解析吗?任何建议请。

2 个答案:

答案 0 :(得分:2)

您可以使用FIND_IN_SET()功能连接两个表格。

试试这个:

SELECT r.name, r.cuisine_id, GROUP_CONCAT(c.cuisine_name)
FROM tbl_restaurant r
LEFT JOIN tbl_cuisine c ON FIND_IN_SET(c.cuisine_id, r.cuisine_id)
WHERE r.published =1 AND r.id = $id
GROUP BY r.id;

检查SQL FIDDLE DEMO

<强>输出

| NAME | CUISINE_ID | GROUP_CONCAT(C.CUISINE_NAME) |
|------|------------|------------------------------|
|  abc |    1,2,6,8 |    Nepali,Indian,Thai,Korean |

答案 1 :(得分:1)

使用FIND_IN_SET和GROUP_CONCAT

SELECT r.name, r.cuisine_id, GROUP_CONCAT(c.cuisine_name)
FROM tbl_restaurant r
LEFT JOIN tbl_cuisine c ON FIND_IN_SET(c.cuisine_id, r.cuisine_id)
WHERE r.published =1 AND r.id = $id
GROUP BY r.id;

输出:

| NAME | CUISINE_ID | GROUP_CONCAT(C.CUISINE_NAME) |
|------|------------|------------------------------|
|  abc |    1,2,6,8 |    Nepali,Indian,Thai,Korean |