我有一张这样的表:
product_id attribute_id
2 7,8
1 2,7
3 7
我还有一个名为$search_ids
的变量,其中包含要搜索的值。
如果$search_ids
的值为7
,我希望它返回所有3行,但如果它的值为2,7
或7,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
答案 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;