#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. никакая другая таблица, к которой я могу получить доступ, не имеет списка тегов, я получаю теги только из самой этой таблицы