Mysql
 sql >> база данни >  >> RDS >> Mysql

Как мога да конвертирам условно агрегиране mysql в laravel заявка?

Трябва да предоставите aggregate функция в клауза, която имаме, можем да използваме отново същата, която имаме в клауза select по този начин

$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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. @OneToMany грешки в MySQL:Не може да се изтрие или актуализира родителски ред:ограничение на външния ключ е неуспешно

  2. Улавяне на изключение за дублиран запис

  3. MySQL. Първичен ключ в релационна таблица. Уникален идентификатор или множество уникални ключове?

  4. Rust:Как да стартираме DML на MySQL с много параметри?

  5. Съхранявайте името на функцията в базата данни и след това я изпълнете