sql >> データベース >  >> RDS >> Mysql

条件付き集計mysqlをlaravelクエリに変換するにはどうすればよいですか?

    aggregateを指定する必要があります 句を持っている関数、私たちはこのように選択で持っているものと同じものを再利用することができます

    $brand = "MAX(CASE WHEN b.attribute_code = 'brand' then b.attribute_value END)";
    
    $model = "MAX(CASE WHEN b.attribute_code = 'model' then b.attribute_value END)";
    
    $category = "MAX(CASE WHEN b.attribute_code = 'category' then b.attribute_value END)";
    
    $subcategory = "MAX(CASE WHEN b.attribute_code = 'subcategory' then b.attribute_value END)";
    
    $brandName = 'honda';
    
    $query = Item::selectRaw("a.number, a.description, {$brand} as brand, {$model} as model, {$category} as category, {$subcategory} as subcategory")
            ->from('items as a')
            ->join('attr_maps as b','b.number','=','a.number')
            ->groupBy('a.number')
            ->havingRaw("{$brand} = ?", [$brandName])
            ->orderBy('description')
            ->paginate(10);
    
    return $query;
    

    編集: コメント後

    このようにパラメータごとに実行できます

    $query = Item::selectRaw("a.number, a.description, {$brand} as brand, {$model} as model, {$category} as category, {$subcategory} as subcategory")
        ->from('items as a')
        ->join('attr_maps as b','b.number','=','a.number')
        ->groupBy('a.number')
        ->orderBy('description');
    
    foreach($param as $key => $value) {
         $query = $query->havingRaw("{$$key} = ?", [$value]);
    }
    
    $results = $query->paginate(10);
    
    return $results;
    


    1. 警告:mysqli_connect():(HY000 / 1049):Mac端末でのみ不明なデータベース

    2. ギリシャ文字のエンコーディングはHTMLで機能しますが、PHPでは機能しません

    3. 2つのテーブルからデータを取得するにはどうすればよいですか

    4. yyyy-mm-ddをmm/dd/yyyyに変換する