在mysql中交叉逗号分隔列表

时间:2017-06-21 10:17:02

标签: php mysql database

我必须在一个sql语句中比较两个逗号分隔的列表。

基本上是查询目标表,该目标表在一列中有逗号分隔的id列表,搜索的目标表再次返回一个id列表。

我试过这个

SELECT * FROM target_table 
 WHERE commaSeparatedListInOneColumn IN (
 SELECT id FROM searchTable WHERE name LIKE '%searchString%')

但我没有得到数据。请帮我解决这个问题。

2 个答案:

答案 0 :(得分:1)

你可以写这样的查询

 SELECT * FROM target_table 
      WHERE commaSeparatedListInOneColumn REGEXP (
      SELECT GROUP_CONCAT(id SEPARATOR '|') FROM searchTable WHERE name LIKE '%searchString%' group by name 
      )

希望这有帮助。

答案 1 :(得分:0)

如果commaSeparatedListInOneColumn包含1,2,3,45之类的值  你有12,2,4,5之类的字符串,如果你想检查12,2,4,5中是否存在任何commaSeparatedListInOneColumn个ID。

然后你可以在 find_in_set()的帮助下完成这项工作。

就像这样

$ids='12,2,4,5';
$filterKeys = explode(',',$ids);
$searchQuery='';
foreach ($filterKeys as $word) {
    $word = trim($word);
    if ($word) {
        $searchQuery = $searchQuery . "find_in_set('$word', trim(`commaSeparatedListInOneColumn`)) > 0 or ";
    }
}
$searchQuery = chop($searchQuery, ' or ');
$finalQuery="SELECT * FROM target_table WHERE $searchQuery";

此处$finalQuery包含它看起来像这样的查询

SELECT * FROM target_table 
WHERE find_in_set('12', trim(`commaSeparatedListInOneColumn`)) > 0 or 
find_in_set('2', trim(`commaSeparatedListInOneColumn`)) > 0 or
 find_in_set('4', trim(`commaSeparatedListInOneColumn`)) > 0 or 
find_in_set('5', trim(`commaSeparatedListInOneColumn`)) > 0

我会帮助你。