php – SQL逗号查询以逗号分隔的字符串与逗号分隔的字符串匹配?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php – SQL逗号查询以逗号分隔的字符串与逗号分隔的字符串匹配?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2142字,纯文字阅读大概需要4分钟。
内容图文
![php – SQL逗号查询以逗号分隔的字符串与逗号分隔的字符串匹配?](/upload/InfoBanner/zyjiaocheng/889/a52611e4222c49a1867f0992729b1417.jpg)
下面的MySQL查询使用PHP来引入$sector,这是一个数字,$subsector_text是逗号分隔的字符串. $subsector_text可以是单个数字或多个ID的列表,例如“3,4,7,9”.
$sql = "
SELECT DISTINCT a.id
, a.name
, a.category_id
, a.sector
, a.subsector
, a.year_in_operation
, a.state
, a.total_value
, b.country_id
, b.project_id
, c.isocode_3
, c.name
FROM com_barchan_project a
JOIN com_barchan_location b
ON b.project_id = a.id
JOIN com_barchan_country c
ON c.id = b.country_id
JOIN com_barchan_project_value_join d
ON a.id = d.project_id
WHERE a.state = 1
AND a.sector = '$sector'
AND a.subsector REGEXP '^{$subsector_text}[,]|[,]{$subsector_text}[,]|[,]{$subsector_text}$|^{$subsector_text}$'
ORDER
BY a.total_value DESC
, a.category_id ASC
, a.name ASC
";
我在上面的查询中遇到的问题是:
AND a.subsector REGEXP '^{$subsector_text}[,]|[,]{$subsector_text}[,]|[,]{$subsector_text}$|^{$subsector_text}$'
如果$subsector_text =“3,4,5,9”,那么它只返回$subsector字段中包含“3,4,5,9”的记录.
期望的结果是它将返回任何具有$subsector_text中任何值的记录.例如,所有这些都应该返回,但目前不是.这个列表是一个例子,绝不是确切的.
1,3
1,5
1,3,7,9
3,5
3,4,5,9
9
3
5
4
如何更改查询以选择$subsector_text字符串中具有值的任何记录?
请注意:如果$subsector_text = 11,则不应选择以下内容作为示例.
1
12
21
任何帮助将不胜感激.
解决方法:
将逗号分隔字符串中的任何值与单个谓词中另一个逗号分隔字符串中的任何值进行匹配是不切实际的.
您可以使用FIND_IN_SET()一次搜索一个值.
这意味着您需要多个谓词,通过拆分输入$subsector_text获得每个值.因此,拆分变量并将其映射到一系列FIND_IN_SET()调用.
我没有测试过以下代码,但它应该让你知道我在说什么:
$subsector_array = array_map('intval', explode(',', $subsector_text));
$subsector_terms = array_map(
function ($id) { return "FIND_IN_SET($id, a.subsector)"; },
$subsector_array);
$subsector_expr = implode(' OR ', $subsector_terms);
$sql = "
SELECT ...
WHERE a.state = 1
AND a.sector = '$sector'
AND ($subsector_expr)
...";
这当然会强制进行表扫描,因为无法索引FIND_IN_SET()或搜索子字符串的任何其他操作.好吧,我认为你在a.state和a.sector上的条件将使用索引来缩小搜索范围,然后再应用FIND_IN_SET()条件.
我理解必须使用您继承的系统的困境.让你的经理知道这需要在某些时候进行重构,因为它现在的设计方式永远不会高效或可靠.
内容总结
以上是互联网集市为您收集整理的php – SQL逗号查询以逗号分隔的字符串与逗号分隔的字符串匹配?全部内容,希望文章能够帮你解决php – SQL逗号查询以逗号分隔的字符串与逗号分隔的字符串匹配?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。