Php 搜索困难
假设我们有一个表,它的列名为Php 搜索困难,php,mysql,search,yii,criteria,Php,Mysql,Search,Yii,Criteria,假设我们有一个表,它的列名为number(数据类型varchar),由手机号码组成。电话号码是固定大小的-10位数。我想做的是,搜索精确位置的数字。比如: 当我发送:xxx xxx xx xx时,它将返回所有号码 当我发送:223 2x5 xx xx时,它将返回仅与此模式匹配的数字 如何在Yii框架中使用CDbcriteria实现这一点?假设用户输入了数字,您有$\u POST[“num”]变量来获取所有数字 $number = ""; for (
number
(数据类型varchar
),由手机号码组成。电话号码是固定大小的-10位数。我想做的是,搜索精确位置的数字。比如:
当我发送:xxx xxx xx xx时,它将返回所有号码
当我发送:223 2x5 xx xx时,它将返回仅与此模式匹配的数字
如何在Yii框架中使用
CDbcriteria
实现这一点?假设用户输入了数字,您有$\u POST[“num”]
变量来获取所有数字
$number = "";
for ($counter = 1; $counter <= 10; $counter++) {
if (is_numeric($_POST["num"][$counter]))
$number .= $_POST["num"][$counter];
else
$number .= "%";
}
$criteria = new CDbCriteria();
$criteria->condition = "number LIKE :number";
$criteria->params = array(':number' => $number);
....
$number=”“;
对于($counter=1;$counter condition=“类似编号:编号”;
$criteria->params=array(':number'=>$number);
....
这必须有助于您而不是“x”,使用“u”并删除空格,然后按照建议执行类似于的
要查找2232x5 xx
,请使用像“2232_5______”这样的编号
如果有必要,你可以这样做
number LIKE REPLACE(REPLACE("223 2x5 xx xx", 'x', '_'), ' ', '')
这里有一个测试:
mysql> select '2232958765' LIKE REPLACE(REPLACE("223 2x5 xx xx", 'x', '_'), ' ', '');
+------------------------------------------------------------------------+
| '2232958765' LIKE REPLACE(REPLACE("223 2x5 xx xx", 'x', '_'), ' ', '') |
+------------------------------------------------------------------------+
| 1 |
+------------------------------------------------------------------------+
使用preg\u replace(“/[^0-9]+/”、“%”、$\u POST[“num”]、-1,$count)
而不是for循环如何?223 2x5 xx xx返回“223%2%5%”,xxx xxx xx xx返回“%”。规范的一部分是“精确位置”。由于%
匹配任意数量的字符,因此它将不正确。