Я пытаюсь отобразить количество собранных и опубликованных записей в таблице крови с тем же именем.

У меня есть такая таблица

Blood Collection
--------------------------------------
id   BloodComponent      Remarks
1    Whole Blood         Collected
2    Platelet            Released
3    Plasma              Collected
4    Platelet            Released
5    Plasma              Collected
6    Whole Blood         Released

Я хотел бы, чтобы вывод был что-то вроде:

Name         Collected       Released
---------------------------------------
Whole Blood      1              1
Platelet         0              2
Plasma           2              0

Я использую laravel как основу ...

-1
James Sachi 22 Фев 2016 в 18:13

2 ответа

Лучший ответ

В ларавеле:

$results = DB::table("BloodCollection")
  ->selectRaw("BloodComponent AS Name,SUM(IF(Remarks = 'Collected', 1, 0)) AS Collected,SUM(IF(Remarks = 'Released', 1, 0)) AS Released")
  ->groupBy("BloodComponent")
  ->get();

Или, если у вас уже есть модель BloodCollection:

$results = BloodCollection::selectRaw("BloodComponent AS Name,SUM(IF(Remarks = 'Collected', 1, 0)) AS Collected,SUM(IF(Remarks = 'Released', 1, 0)) AS Released")
  ->groupBy("BloodComponent")
  ->get();

Тогда:

foreach($results as $result){

    echo $results->Name . ": ".$results->Collected ." collected, ".$results->Released ." released.";

}
1
Jeff 22 Фев 2016 в 15:58

Если вам нужно, чтобы строки стали столбцами данных, вы должны преобразовать строки с помощью запроса кросс-таблицы:

SELECT `BloodComponent` AS `Name`,
SUM(IF(`Remarks` = 'Collected', 1, 0)) AS `Collected`,
SUM(IF(`Remarks` = 'Released', 1, 0)) AS `Released`
FROM `BloodCollection`
GROUP BY `BloodComponent`

Вот информативный пост, в котором более подробно показано использование таких запросов.

В Ларавеле:

DB::table("BloodCollection")
  ->selectRaw("`BloodComponent` AS `Name`,SUM(IF(`Remarks` = 'Collected', 1, 0)) AS `Collected`,SUM(IF(`Remarks` = 'Released', 1, 0)) AS `Released`")
  ->groupBy("BloodComponent")
  ->get();
1
Jay Blanchard 22 Фев 2016 в 15:25