数据库规范化对于高效的数据管理至关重要,但有时,项目可能需要以非规范化形式处理遗留数据。本文探讨了一种在给定列中连接两个以逗号分隔值的表的技术。
场景:
假设我们有两个表:
注释表:
职位表:
我们的目标是连接这些表并将 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中文网其他相关文章!