Laravel PHP & Mysql: преобразование данных таблицы в столбцы и строки путем подсчета экземпляров строки - PullRequest
0 голосов
/ 13 апреля 2019

У меня есть таблица базы данных (около 10000+ строк) с такими данными.

tags_id   tag_name  contact   date_applied
   1        happy     12         2019-04-01
   2        sad       67         2019-04-01
   1        happy     96         2019-04-01
   3        angry     56         2019-04-02
   2        happy     43         2019-04-02

Теперь мне нужно, чтобы эта таблица выглядела так.

date_applied  happy  sad  angry
 2019-04-01     2     1     0
 2019-04-02     1     0     1

Как мне добиться этого в Laravel / PHP? Мне нужно сохранить это в другую таблицу базы данных или файл.

1 Ответ

3 голосов
/ 13 апреля 2019

Попробуйте следующий запрос.

DB::table('table_name')
->select(DB::raw("
    sum( case when tag_name = 'happy' then 1 else 0 end) as happy
    ,sum( case when tag_name = 'sad' then 1 else 0 end) as sad
    ,sum( case when tag_name = 'angry' then 1 else 0 end) as angry
"), 'date_applied')
->groupBy('date_applied');

Или вы можете использовать прямой запрос

select date_applied
,sum( case when tag_name = 'happy' then 1 else 0 end) as happy
,sum( case when tag_name = 'sad' then 1 else 0 end) as sad
,sum( case when tag_name = 'angry' then 1 else 0 end) as angry
from table
group by date_applied

Для динамических тегов

$tags = Tag::all();
$selectQuery = '';
foreach($tags as $tag){
    $selectQuery.="sum( case when tag_name = '".$tag->tag_name."' then 1 else 0 end) as ".$tag->tag_name.",";
}

DB::table('table_name')
->select(DB::raw($selectQuery."date_applied")
->groupBy('date_applied')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...