【问题标题】:Yii search difficultyYii 搜索难度
【发布时间】:2014-04-27 14:09:19
【问题描述】:

假设我们有一个表,其中包含名为number(数据类型varchar)的列,其中包含手机号码。电话号码是固定大小的 - 10 位数字。我想要做的是,搜索确切位置的数字。喜欢:

当我发送:xxx xxx xx xx 时,它将返回所有编号

当我发送:223 2x5 xx xx 时,它将返回仅匹配此模式的数字

如何在 Yii 框架中使用CDbcriteria 实现这一点?

【问题讨论】:

    标签: php mysql search yii criteria


    【解决方案1】:

    假设用户输入了数字,而您有 $_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);
                ....
    

    这对你有帮助

    【讨论】:

    • preg_replace('/[^0-9]+/', '%', $_POST["num"], -1, $count)代替for循环怎么样? 223 2x5 xx xx 返回 '223%2%5%' 和 xxx xxx xx xx 返回 '%'。
    • 部分规范是“精确位置”。由于% 匹配任意数量的字符,因此不会正确。
    【解决方案2】:

    使用“_”代替“x”并删除空格。然后按照建议执行LIKE

    寻找223 2x5 xx xx,使用number LIKE "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 |
    +------------------------------------------------------------------------+
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多