查找列中具有多个值的记录
在关系数据库中,通常在单个列中存储多个值。但是,当使用此类列查询数据时,隔离特定值可能具有挑战性。让我们探讨一个场景,其中我们有一个包含“子级”列的表,其中包含用逗号分隔的多个名称。
问题:
考虑下表:
id | name | children |
---|---|---|
1 | Roberto | Michael,Dia |
2 | Maria | John,Alex |
3 | Mary | Alexandre,Diana |
目标是找到有一个名叫亚历克斯的孩子的父母。虽然使用“WHERE Children = 'Alex'”是理想的选择,但由于每个单元格中有多个名称,它会失败。使用“WHERE Children LIKE '%Alex%'”会返回额外的不相关匹配。
标准化架构:
要解决此问题,可以通过创建表架构来标准化一个单独的儿童表,每个孩子占一行。然后可以将原始表与子表连接起来,以找到具有特定子表的父表。然而,如果这个解决方案不可行,还有一个替代方案:
FIND_IN_SET 函数:
MySQL FIND_IN_SET() 函数可用于检查特定值是否存在于逗号分隔的列表中。对于这种情况,查询将为:
WHERE FIND_IN_SET('Alex', children)
此查询将返回在“children”列中找到“Alex”的行。
以上是如何高效查找单个数据库列中具有多个值的记录?的详细内容。更多信息请关注PHP中文网其他相关文章!