Php mysql按搜索关键字的每个数字进行搜索查询

Php mysql按搜索关键字的每个数字进行搜索查询,php,mysql,Php,Mysql,我在数据库里有一个数字 88746 65654 78655 67856 09958 55640 当我搜索时,我需要出去 “786”表示搜索键为786 search result 88746 78655 67856 如果在该数字组中出现任何7 8 6,则输出条件意味着如果我搜索5,即搜索键为5,则需要显示所有出现数字5的行。示例关键字是5 out是656547865567856099585564

我在数据库里有一个数字

    88746
    65654
    78655
    67856
    09958
    55640 
当我搜索时,我需要出去

“786”表示搜索键为786

    search result        
    88746
    78655
    67856 
如果在该数字组中出现任何7 8 6,则输出条件意味着如果我搜索5,即搜索键为5,则需要显示所有出现数字5的行。示例关键字是5 out是6565478655678560995855640表示数字5出现在所有这组数字中

我需要一个mysql查询来解决这个问题

我试着问了一个问题

select * from plates where number LIKE %786%

        --------
        number |
        ------ |
        88746  |
        65654  |
        78655  |
        67856  |
        09958  |
输出

        number |
        ------ |
        88746  |
        78655  |
        67856  |

如果每个字符的数字较大,则必须检查每个字符

SELECT * FROM plates
WHERE number LIKE '%7%'
   AND number LIKE '%8%'
   AND number LIKE '%6%'   
如果搜索输入包含更多或更少的字符,则必须更改查询。我建议您使用某种模板字符串编号,如“%$I}%”,然后使用$I top将该编号放入其中,然后将其附加到现有查询中

例如: 搜索输入是8765

$query = "SELECT * FROM plates WHERE ";
$pattern = "number LIKE '%%%s%%' ";
$input = "8765";
$c = strlen($input); // 8765 returns 4, 456 returns 3 etc.
for ($i = 0; $i < $c; $i++) {
    $pattern2 = "";
    $pattern2 = sprintf($pattern, $input[$i]);
    if ($i < ($c - 1)) { // the last LIKE statement should not have AND
        $pattern2 .= "AND ";
    }
    $query .= $pattern2;
}
echo $query // SELECT * FROM plates WHERE number LIKE '%8%' AND number LIKE '%7%' AND number LIKE '%6%' AND number LIKE '%5%'

首先你需要拆分字符串

$arr = str_split("786");
array_walk($arr, function (&$item) {
    $item = '"%' . $item . '%"';
});
$in_clause = rtrim(implode(" OR ", $arr), 'OR ');

$query = "select * from plates where number $in_clause";

我希望这会有所帮助。

这些是字符串。用户将搜索“786”,并且搜索键可能是4位、5位或2位,这意味着他们可能会搜索“78”,所以我们需要分解数字?还有其他快速解决方案吗?