我有一些sql,它在db表中搜索来自表单输入的数字。

以下行是一个很好的例子:

124
1240
12400
124000


我的sql是一个简单的like语句:

SELECT NUMBER FROM TABLE WHERE NUMBER LIKE '$number%'


如果使用搜索124,则可以找到4行。

我的问题是,如果用户输入12400000,如何返回124000的行?
我假设我需要遍历数字直到找到行?

在运行sql之前,我的输入至少需要3个数字,因此我想在3个数字处停止循环。

使用php和/或SQL,有没有一种方法可以让我将字符串计数到定义的点;字符串回到第三个字符?

最佳答案

只需根据输入内容创建一个数组,然后使用IN

$_POST['number'] = '124000';

$number = (string)(int)$_POST['number'];

$numbers = array();
$inNumber = '';
if(strlen($number) > 2){
    $baseNumber = substr($number, 0, 3);
    $numbers[] = $baseNumber;
    for($i=3; $i<=strlen($number)-1; $i++){
        $inNumber.= $number[$i];
        $numbers[] = $baseNumber.$inNumber;
    }

    $tosearch = implode("','", array_reverse($numbers));
    $query = "SELECT * FROM `TABLE` WHERE `NUMBER` IN ('".$tosearch."') ORDER BY FIELD(`id`, '".$tosearch."')";
    echo $query; // SELECT * FROM `TABLE` WHERE `NUMBER` IN ('124000','12400','1240','124') ORDER BY FIELD(`NUMBER`, '124000','12400','1240','124')
}

09-20 18:37