Я объясню мою проблему с примером:Counting в сложном запросе
Столы: место - комментарий - activities_comment - деятельность
Пользователь может прокомментировать место и выбрать, какие виды деятельности могут делать в этом месте. Мероприятия, например: бег, плавание, прогулки и подъем.
Так некоторые пользователи будут голосовать более чем 1 активность, поэтому я не могу поставить его прямо в одной и той же таблицы COMMENT, мне нужно создать таблицу pivote ACTIVITIES_COMMENT, проблема здесь идет, я был в состоянии показать все комментарии с их деятельностью выбраны в каждом месте ..
Но сейчас Я хочу подсчитать количество действий и упорядочить их по наиболее выбранным действиям, чтобы они были выбраны пользователями в комментариях для каждого места. Как я могу это сделать ??
Самое лучшее, что я могу сделать, это:
$place = Place::with('city','comments')
->where('id',$placeId)->first();
$place->activities = Activity::join('activities_comment', 'activity.id', '=', 'activities_comment.activity_id')
->join('comment', 'comment.id', '=', 'activities_comment.comment_id')
->select('comment.id','activities_comment.activity_id',
DB::raw('(SELECT count(activities_comment.activity_id) FROM activities_comment WHERE activities_comment.activity_id = 1) as run'),
DB::raw('(SELECT count(activities_comment.activity_id) FROM activities_comment WHERE activities_comment.activity_id = 2) as swim'),
DB::raw('(SELECT count(activities_comment.activity_id) FROM activities_comment WHERE activities_comment.activity_id = 3) as walk'),
DB::raw('(SELECT count(activities_comment.activity_id) FROM activities_comment WHERE activities_comment.activity_id = 4) as climb'),
)
->where('comment.place_id',$place->id)
->get();
Проблема заключается в том, что этот запрос считается наиболее отдельных видов деятельности, но во всех местах, я хочу, чтобы рассчитывать только на каждом месте.
РЕДАКТИРОВАТЬ:
Пример строки:
место стол:
id | name
----------
1 | Alaska
2 | Peru
3 | Argentina
комментарий таблица:
id | user_id | place_id | text
------------------------------------
1 | 1 | 1 | some text
2 | 3 | 1 | some text
3 | 2 | 2 | some text
активность таблица:
id | name
----------
1 | run
2 | swim
3 | walk
4 | climb
activity_comment стол:
id | comment_id | activity_id
------------------------------
1 | 1 | 1
2 | 1 | 2
3 | 2 | 2
4 | 3 | 2
Когда я получаю в комментариях на Аляске, я хотел бы видеть время, что пользователи выбрали активность там, аляска будет показано:
run: 1 time
swim: 2 times
walk: 0 times
climb: 0 times
Если я иду в Перу комментарии:
run: 0 times
swim: 1 time
walk: 0 times
climb: 0 times
Спасибо заранее.
вы посмотрели GROUP BY - я пытаюсь понять, что вы хотите точно от вашего вопроса но общий jist GROUP BY, похоже, дает то, что вы хотите, - можете ли вы уточнить, добавив небольшую пробную строку с 3/4 строками и возвращаемый запрос? –
Я добавлю это через секунду .. мне нужно добавить условное выражение в каждый выбор raw, я думаю, чтобы считать активность только для одного места в то время. – Luco
Я просто отредактировал его :) – Luco