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

时间:2016-06-11 14:23:42

标签: php 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 varibles是POSTS,因此它们可以是每个帖子中的任何内容。

他们是这样的:

$area = $_POST['area'];
$res = $_POST['res'];

2 个答案:

答案 0 :(得分:2)

你应该使用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]) ";

答案 1 :(得分:1)

您需要将其分成LIKEOR,例如:

...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%')