我在PHP中有一个字符串,如:
"1234,2345,4567,5676,234,12,78957".....
我想以varchar(30)格式提取这些数字,并在像
这样的命令上使用它们SELECT * FROM TABLE_NUM WHERE ID LIKE '%NUM';
其中NUM将具有上述7个字符串。
如果可能,我还想限制'%'在'%NUM'仅限1-5个字符,即前缀不应超过5个字符。示例NUM = 1234且ID具有(31234,5678956781234)它应该仅提供第一个作为结果而不是另一个。
因此,我将获得所有匹配行的合并结果。
我怎样才能做到这一点?
谢谢!
答案 0 :(得分:2)
如果该字符串来自数据库中的某个列,则应修复该架构。设计一个必须处理子列数据的模式几乎总是。
如果它是来自 outside 数据库的字符串,并且您只想根据各个部分运行查询,那么最好使用DBMS外部的 设施构建查询。
例如,在Linux下使用bash
:
pax> list="1234,2345,4567,5676,234,12,78957"
pax> for i in $(echo $list | sed 's/,/ /g'); do
...> echo mysql "\"SELECT * FROM TABLE_NUM WHERE ID LIKE '%$i'\""
...> done
mysql "SELECT * FROM TABLE_NUM WHERE ID LIKE '%1234'"
mysql "SELECT * FROM TABLE_NUM WHERE ID LIKE '%2345'"
mysql "SELECT * FROM TABLE_NUM WHERE ID LIKE '%4567'"
mysql "SELECT * FROM TABLE_NUM WHERE ID LIKE '%5676'"
mysql "SELECT * FROM TABLE_NUM WHERE ID LIKE '%234'"
mysql "SELECT * FROM TABLE_NUM WHERE ID LIKE '%12'"
mysql "SELECT * FROM TABLE_NUM WHERE ID LIKE '%78957'"
该脚本将回显命令以执行您想要的操作(假设mysql
是您的DBMS的正确CLI接口) - 只需删除开头的echo
即可实际上执行命令。
对于PHP(根据您的问题编辑),您可以使用explode
函数来拆分字符串,例如:
$list = "1234,2345,4567,5676,234,12,78957";
$numbers = explode (",", $list);
然后对$numbers
的每个元素执行查询。
如果你所追求的是由所有这些值组成的单个结果集,还有其他方法可以做到。一个是使用列表构建一个“超级查询”字符串,它将为您完成所有工作,然后执行一次。
只需使用or
子句将不同的“子”查询连接成一个(伪代码):
$query = "select * from table_num"
$joiner = " where"
for each $element in $list:
$query = $query + $joiner + "id like '%" + $element + "'"
$joiner = " or"
execute_sql $query
最终会为您提供查询字符串:
SELECT * FROM TABLE_NUM
WHERE ID LIKE '%1234'
OR ID LIKE '%2345'
:
OR ID LIKE '%78957'