1

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

在 tbl_restaurant 中,cooking_id 字段包含逗号(,)分隔值,例如 (3,6,9,20,31),当我尝试使用 join 拉出 food_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 之前解析吗?请有任何建议。

4

2 回答 2

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 演示

输出

| NAME | CUISINE_ID | GROUP_CONCAT(C.CUISINE_NAME) |
|------|------------|------------------------------|
|  abc |    1,2,6,8 |    Nepali,Indian,Thai,Korean |
于 2013-12-23T09:24:41.523 回答
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 |
于 2015-01-21T07:51:05.447 回答