使用PHP将以下输入转换为SQL的最佳方式是什么?
+a - includes a
+(cd) - includes c or d but not both
+(c/d/e) - includes any of these
-f - does not include f
我曾使用preg_replace或爆炸来循环执行和do-if语句,但没有任何东西能始终如一地工作。
我基本上需要像
+a +(c/d/e)
进入
SELECT * FROM the_table
WHERE description LIKE "%a%"
AND (description LIKE "%c%" OR description like "%d%" OR description LIKE "%$e%")
谢谢
更新:
这是我的尝试。我相信有一个更简单的方法。。。
public function custom_query($query){
$fields = " feed_items.description ";
$return_query = "";
$query = str_replace(" ", , $query);
$pluses = explode( + ,$query);
foreach($pluses as $plus){
$plus = trim($plus);
if (substr($plus,0,1) == ( ){
$return_query .= AND ( ;
$plus = str_replace(array( ( , ) ), , $plus);
$ors = explode( / , $plus);
foreach($ors as $or){
if ($or){
$return_query .= $fields." LIKE %".$or."% OR";
}
}
$return_query = rtrim($return_query, OR );
$return_query .= ) ;
} else {
if ($plus){
$return_query .= AND . $fields. LIKE . "% .$plus. %" ;
}
}
}
$negatives = explode( - ,$query);
foreach($negatives as $negative){
$negative = trim($negative);
if (substr($negative,0,1) == ( ){
$return_query .= AND ( ;
$negative = str_replace(array( ( , ) ), , $negative);
$ors = explode( \ , $negative);
foreach($ors as $or){
if ($or){
$return_query .= $fields." NOT LIKE %".$or."% OR";
}
}
$return_query = rtrim($return_query, OR );
$return_query .= ) ;
} else {
if ($negative){
$return_query .= AND . $fields. NOT LIKE . "% .$negative. %" ;
}
}
}
$return_query = AND .ltrim($return_query, AND );
return $return_query;
}