我必须在一个sql语句中比较两个逗号分隔的列表。
基本上是查询目标表,该目标表在一列中有逗号分隔的id列表,搜索的目标表再次返回一个id列表。
我试过这个
SELECT * FROM target_table
WHERE commaSeparatedListInOneColumn IN (
SELECT id FROM searchTable WHERE name LIKE '%searchString%')
但我没有得到数据。请帮我解决这个问题。
答案 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
我会帮助你。