我可以帮助您进行翻译。以下是您需要翻译的内容:
我希望允许我的用户使用任意顺序的部分单词在数据库中搜索数值,因此要搜索的字符串为:
nan mu
这段代码会返回任何包含nan
和mu
的字符串,顺序不限。使用array_filter()
和该答案中提供的解决方案,只需两个位即可创建字符串。
%nan%mu%
%mu%nan%
让MySQL搜索这些内容。现在当有两个以上的位时,例如 nan mu te
, 我们就会遇到问题。目的是获取这些字符串:
$string1 = %nan%mu%te%
$string2 = %nan%te%mu%
$string3 = %mu%nan%te%
$string4 = %mu%te%nan%
$string5 = %te%nan%mu%
$string6 = %te%mu%nan%
需要构造6个mysql LIKE
条件:WHERE Field LIKE $string1 AND Field LIKE $string2 ...
,以便结果中包含这三个位的任何可能性。
对于那些要抱怨sql注入的人,谢谢,但我使用PDO和参数化查询。
我的实际尝试字符串为nan mu te
:
class EstDefini
{private $STR;
function __construct($vSTR)
{$this->STR = $vSTR;}
function Verifier($vSTR)
{return !($vSTR == $this->STR);}}
$vString = 'nan mu te';
$aBits = explode(' ',$vString);
$vNb = count($aBits);
for ($i=0;$i<$vNb;$i++)
{$vAppend = implode('%',array_filter($aBits,array(new EstDefini($aBits[$i]),'Verifier')));
$aLiterals[$i] = '%' . $aBits[$i] . '%' . $vAppend;}
返回值只有3个字符串,因为我的初始计数只有三个(从我的爆炸字符串中得到了三个比特):(这是var_dump($aLiterals)
)。
array(3) {
[0]=>
string(10) "%nan%mu%te"
[1]=>
string(10) "%mu%nan%te"
[2]=>
string(10) "%te%nan%mu"
}
我最初的想法是修改计数:
$vNb = $vNb * max($vNb-1,1);
尝试移动其他位以获得不同的LIKE
友好字符串,但由于我的初始$aBits
数组仍然是大小为3的,因此这个类创建调用new EstDefini($aBits[$i])
将尝试访问未定义的位。
如何从以空格分隔的单词创建LIKE
友好字符串,以便在MySQL中以任何顺序查找所有这些单词?