繁体   English   中英

PHP:在mysql中搜索逗号分隔的字符串?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM