Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 搜索困难_Php_Mysql_Search_Yii_Criteria - Fatal编程技术网

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返回“%”。规范的一部分是“精确位置”。由于
%
匹配任意数量的字符,因此它将不正确。