无法返回部分匹配和完全匹配

时间:2014-03-15 18:55:47

标签: php mysql

我有一张这样的表:

product_id    attribute_id
2             7,8
1             2,7
3             7

我还有一个名为$search_ids的变量,其中包含要搜索的值。

如果$search_ids的值为7,我希望它返回所有3行,但如果它的值为2,77,8,那么我想要只返回那一行。

我尝试了以下$search_ids的值为7,但这不会返回第二行!如果我将行的值从2,7更改为7,2,那么它也会返回该行!

现在,以下查询:

$q = "SELECT product_id FROM product_attributes 
    WHERE attribute_id IN ('$search_ids')
    OR attribute_id IN ($search_ids) 

返回

2
3

而不是

2
1
3

2 个答案:

答案 0 :(得分:0)

试试这个:

$q = "SELECT product_id FROM product_attributes 
      WHERE attribute_id REGEXP '(^|,)($search_ids)(,|$)'"; 

这将匹配product_id匹配$search_ids的行,如果它完全匹配,则以逗号分隔列表的开头,逗号分隔列表的中间或结尾处以逗号分隔的列表。

答案 1 :(得分:0)

我会这样做:

$search_ids = '2,7'; //dummy data

$q = '';
$ids = explode(',', $search_ids);
foreach ($ids as $id) {
    $q .= (strlen($q) == 0)?'':' AND';
    $q .= ' FIND_IN_SET(\''.$id.'\', attribute_id) > 0';
}

$q = 'SELECT product_id FROM product_attributes WHERE' . $q;