Laravel PHP и Mysql: преобразование табличных данных в столбцы и строки путем подсчета экземпляров строки

#php #mysql #laravel #laravel-5

#php #mysql #laravel #laravel-5

Вопрос:

У меня есть таблица базы данных (около 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. попробуйте learn.microsoft.com/en-us/sql/t-sql/queries/…

2. @SandeepSudhakaran база данных, которую мы используем, — mysql

Ответ №1:

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

 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')
  

Комментарии:

1. Спасибо! это кажется правильным, но в любом случае я могу сделать имя_тега динамическим, в этой таблице много тегов, и я не могу сделать это статически

2. хранится ли ваш тег в какой-либо таблице?

3. никакая другая таблица, к которой я могу получить доступ, не имеет списка тегов, я получаю теги только из самой этой таблицы