【问题标题】:How to get all rows from database table using ID from field with list of IDs in Yii?如何使用 Yii 中带有 ID 列表的字段中的 ID 从数据库表中获取所有行?
【发布时间】:2018-04-24 12:02:05
【问题描述】:

我正在使用 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);

【问题讨论】:

    标签: php mysql database yii yii1.x


    【解决方案1】:

    您需要使用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)

    如果字符串str在由N子字符串组成的字符串列表strlist中,则返回一个1N范围内的值。字符串列表是由 , 字符分隔的子字符串组成的字符串。如果第一个参数是常量字符串,第二个参数是SET 类型的列,则FIND_IN_SET() 函数被优化为使用位运算。如果str 不在strlist 中或strlist 是空字符串,则返回0。如果任一参数为 NULL,则返回 NULL。如果第一个参数包含逗号 (,) 字符,此函数将无法正常工作。

    【讨论】:

    • 它对我有用。我使用的函数如下:$model= new Projects;$criteria=new CDbCriteria();$criteria->condition="t.status='1' and find_in_set( $cat_id, project_category_id) "; $project_model =$model->findAll($criteria);
    【解决方案2】:

    在 Mysql 中使用 GROUP_CONCAT() ;表格中的所有行相加为一行;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-03
      • 2011-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多