在关系数据库中,列通常为每行保存单个值。但是,在某些情况下,您可能需要在单个列中存储多个值,并用逗号等分隔符分隔。这可能会在查询数据时带来挑战,因为等式运算符等传统运算符不再按预期工作。
例如,考虑下表,它存储父子关系:
id name children 1 Roberto Michael,Dia 2 Maria John,Alex 3 Mary Alexandre,Diana
如果我们尝试使用查询查找有名为“Alex”的孩子的父母:
WHERE children = 'Alex'
我们将检索到零结果,即使亚历克斯是玛丽亚的孩子。这是因为我们正在寻找精确匹配,但由于子列中存在多个值,该匹配不存在。
要处理这种情况,我们需要探索替代方法:
规范化架构:
理想的解决方案是规范化架构并为子项创建一个单独的表,每个子项都有一个单独的行以及对父级的引用。这将允许基于子名称进行高效查询。
使用 FIND_IN_SET:
如果规范化模式不可行,您可以使用 FIND_IN_SET 函数,该函数检查是否值存在于逗号分隔的列表中。查询将是:
WHERE FIND_IN_SET('Alex', children)
这将返回有一个名为 Alex 的孩子的父母。但是,需要注意的是,FIND_IN_SET 并不是最有效的方法,只有在标准化不可行的情况下才应使用。
以上是如何查询单个数据库列中存储的多个值?的详细内容。更多信息请关注PHP中文网其他相关文章!