mysql - 如何使用从 MySQL 中提取逗号分隔值的连接

标签 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 之前解析还是其他?请提出任何建议。

最佳答案

您可以使用 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 |

关于mysql - 如何使用从 MySQL 中提取逗号分隔值的连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20740268/

相关文章:

.net - MySQL Connector/NET 检查表中的新更改

javascript - 如何在两个表之间使用sequelize创建嵌套请求

php - SQL Select 使用同一表中的不同参数

sql - TSQL - 通过智能减少记录数量 - 模式(崩溃影响数据)

mysql - 选择当前用户拥有的所有项目,如果不是,则显示较少的项目

mysql - Rails 服务器未在 Rails 3.1.2 上启动

php - 如何解决 r57shell_php_php 警告?

mysql - SQL过滤多表数据

select - Javascript选择选择列表的第一个选项

javascript - AngularJS - 选择 - 服务器调用的默认值