我正在使用PHP,Yii 1.1和MySql来完成一个项目。
我的表格products
包含字段product_id
,product_category_id
,product_name
,product_image
,product_description
等等。
product_id
是主键,product_category_id
包含产品所属类别的ID(可以使用多个ID,如“1,3,4”作为字符串)。
如何从该表中获取其product_category_id
包含特定值的所有行?
例如,如果表格如下:
| product_id | product_category_id |....
| 1 | 1,3,4 |....
| 2 | 2,5 |....
| 3 | 2,3,6 |....
我需要所有行product_category_id=3
,然后它应该找到第一行和第三行。
注意:这与
相反SELECT * FROM `product` WHERE `product_category_id` IN (1,2,3);
答案 0 :(得分:0)
在Mysql中使用GROUP_CONCAT();表中的所有行都添加一行;
答案 1 :(得分:0)
您需要使用find_in_set()
功能。 Yii 2.0的示例:
$products = Product::find()
->andWhere(new Expresssion('FIND_IN_SET(:category_id, product_category_id)', [
':category_id' => $categoryId,
]))
->all();
Yii 1.1的例子:
$products = Product::model()
->findAll('FIND_IN_SET(:category_id, product_category_id)', [
':category_id' => $categoryId,
]);
<强>
FIND_IN_SET(str,strlist)
强>如果字符串
1
位于由N
子字符串组成的字符串列表str
中,则返回strlist
到N
范围内的值。字符串列表是由字符串分隔的子字符串组成的字符串。如果第一个参数是常量字符串而第二个参数是SET
类型的列,则FIND_IN_SET()
函数将被优化为使用位算术。如果0
不在str
或strlist
为空字符串,则返回strlist
。如果任一参数为NULL
,则返回NULL
。如果第一个参数包含逗号(,
)字符,则此函数无法正常工作。