首页 > 数据库 > mysql教程 > 如何在列中连接具有逗号分隔值的表?

如何在列中连接具有逗号分隔值的表?

Linda Hamilton
发布: 2024-12-08 12:00:21
原创
394 人浏览过

How to Join Tables with Comma-Separated Values in a Column?

使用逗号分隔值连接表

数据库规范化对于高效的数据管理至关重要,但有时,项目可能需要以非规范化形式处理遗留数据。本文探讨了一种在给定列中连接两个以逗号分隔值的表的技术。

场景:
假设我们有两个表:

  • 注释表:

    • nid:注释ID
    • forDepts:以逗号分隔的部门 ID
  • 职位表:

    • id:职位 ID
    • 姓名:职位name

我们的目标是连接这些表并将 forDepts 列与 Positions 表中的值关联起来,创建一个包含以逗号分隔的职位名称的新列。

解决方案使用CONCAT_WS:

SELECT n.nid,
       CONCAT_WS(', ', p.name) AS DepartmentName
FROM   Notes n
JOIN   Positions p
       ON n.forDepts = p.id
登录后复制

但是,此方法只会检索每个部门 ID 的第一个匹配项,而不是所有匹配的部门。

使用 FIND_IN_SET 的解决方案:

SELECT  a.nid,
        GROUP_CONCAT(b.name ORDER BY b.id) AS DepartmentName
FROM    Notes a
        INNER JOIN Positions b
            ON FIND_IN_SET(b.id, a.forDepts) > 0
GROUP   BY a.nid
登录后复制

FIND_IN_SET 函数检查某个值是否存在于以逗号分隔的字符串。通过在 JOIN 条件中使用它,我们确保包含所有匹配位置。 GROUP_CONCAT 函数连接检索到的职位名称,并用逗号分隔。

PHP 代码集成:

可以修改给定的 PHP 代码以通过替换来检索扩展的 DepartmentName 列mysql_query 语句中的查询与上面建议的解决方案。这将使代码能够正确导出以逗号分隔的位置名称。

注意:
虽然标准化数据库是理想的选择,但有时需要处理非标准化数据。本文讨论的技术提供了一种在此类场景中有效连接表和聚合逗号分隔值的解决方案。

以上是如何在列中连接具有逗号分隔值的表?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板