[英]PHP: search comma separated string in mysql?
我有一个mysql查询,它简单地查询mysql以查找LIKE
字符串并显示结果。
在相同的mysql查询中,我有2个LIKE
。
1始终是单个字符串,而另一个则可以是单个字符串,有时也可以是多个字符串,并用逗号分隔。
当我使用我的代码时,即使我在mysql数据库中具有所有字段,并且在列中也具有所有搜索字符串,我根本没有任何结果。
这是我的代码:
$area = 'London';
$res = 'santandar, HSBC, RBS, ';
$sql = "SELECT * FROM banks WHERE location LIKE '%$area%' AND name LIKE '%$res'";
我也用preg_match尝试过,它没有返回任何内容:
$sql = "SELECT * FROM banks WHERE location LIKE '%$area%' AND name LIKE '".preg_match($res)."'";
如果删除第二个LIKE,并且我的代码如下所示,则可以正常工作:
sql = "SELECT * FROM banks WHERE location LIKE '%$area%'";
因此,当我尝试使用逗号分隔的字符串进行搜索时,问题就开始了。
有人可以建议这个问题吗?
编辑:
PHP变量是POSTS,因此它们在每个帖子中都可以是任何东西。
他们是这样的:
$area = $_POST['area'];
$res = $_POST['res'];
您应该使用OR
条件:
$res_array = explode(',' $res)
$num_elem= count($res_array) // with this value you can build dinamically the query
"SELECT * FROM banks WHERE location LIKE '%$area%'
AND ( name LIKE concat('%', $res_array[0]),
OR LIKE concat('%', $res_array[1])
OR LIKE concat('%', $res_array[2]) ";
您将需要使用OR
将其吹到单独的LIKE
,例如:
...WHERE location LIKE '%{$area}' AND (name LIKE '%{$name1}%' OR name LIKE '%{$name2}' OR ...)
您可以使用一些PHP逻辑相当简单地编写此代码:
function build_like_or( $values, $field_name ) {
// Create an array from the comma-separated values
$names = explode( ',', $values );
// Trim all the elements to remove whitespaces
$names = array_map( 'trim', $names );
// Remove empty elements
$names = array_filter( $names );
$where = array();
// Loop over each, placing the "LIKE" clause into an array
foreach( (array)$names AS $name ) {
$where[] = "{$field_name} LIKE '%{$name}%'";
}
// Glue up the LIKE clauses.
$where = '(' . implode(' OR ', $where) . ')';
// Results will be something like:
// $where = "(name LIKE '%santadar%' OR name LIKE '%HSBC%')"
return $where;
}
用法:
$area = 'London';
$res = 'santandar, HSBC, RBS, ';
$name_where = build_like_or( $res, 'name');
$sql = "SELECT * FROM banks WHERE location LIKE '%$area%' AND {$name_where}";
// echo $sql outputs "SELECT * FROM banks WHERE location LIKE 'London' AND (name LIKE '%santadar%' OR name LIKE '%HSBC%' OR name LIKE '%RBS%')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.