数据库特殊条件处理
前公司里面有一段功能是这样的,当用户输入 A交B并C的时候,需要在数据库里面找到相应的记录,这个时候实际上需要在数据库里面翻译成数据库能识别的语法,实际上应该翻译成 (A && B)|| C,经过一番编码,最终是这样的,感觉还是挺有意思的,记录一下
function getUnionAndDifference($value) {
$value = str_replace(" 交 ", " `&` ", $value);
$value = str_replace(" 并 ", " `+` ", $value);
$value = str_replace(" 差 ", " `-` ", $value);
// 除交并差外都加壳
$value = preg_replace_callback("/([<x{4e00}-x{9fa5}>_a-zA-Z0-9]+)/u", function($matches) {
return "{" . $matches[0] . "}";
}, $value);
$sql = preg_replace_callback("/{(.*?)}/s", function($matches) {
return "title like" .""%{$matches[0]}%"";
}, $value);
// 换成交并差的SQL语法
$sql = str_replace(" `&` ", " interSect ", $sql);
$sql = str_replace(" `+` ", " union ", $sql);
$sql = str_replace(" `-` ", " except ", $sql);
return $sql;
}
echo getUnionAndDifference(" A 交 B 并 C");
以上是 数据库特殊条件处理 的全部内容, 来源链接: utcz.com/z/517797.html