如何使用带有Yii中ID列表的字段的ID从数据库表中获取所有行?

时间:2018-04-24 12:02:05

标签: php mysql database yii yii1.x

我正在使用PHP,Yii 1.1和MySql来完成一个项目。

我的表格products包含字段product_idproduct_category_idproduct_nameproduct_imageproduct_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);

2 个答案:

答案 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中,则返回strlistN范围内的值。字符串列表是由字符串分隔的子字符串组成的字符串。如果第一个参数是常量字符串而第二个参数是SET类型的列,则FIND_IN_SET()函数将被优化为使用位算术。如果0不在strstrlist为空字符串,则返回strlist。如果任一参数为NULL,则返回NULL。如果第一个参数包含逗号(,)字符,则此函数无法正常工作。