
Wild
20.12.2016
12:58:07
5 разных count
у меня есть поле type, и оно может быть 1 из 5.
И по каждому значению, мне нужно узнать, сколько строк там есть

VSKut
20.12.2016
12:58:40
groupby group_id

Google

VSKut
20.12.2016
12:59:03
и там в select(bd::raw(count(*)))
как-то так
эксперементируй

Wild
20.12.2016
12:59:15
все не то

VSKut
20.12.2016
12:59:46
группируешь по этому id и тебе сразу даёт список count для каждого из нужных id
<?php
Notify::select(DB::raw('COUNT(*) as count, group_id'))->whereIn('group_id', [$id,$id2,$id3])->groupBy('group_id');
что-то такое
выдаст несколько строк count
для каждого id

Wild
20.12.2016
13:04:13
id один
а вот type
несколько
Структура таблицы имеет такой вид примерно id, group_id, type, readed.

Google

Wild
20.12.2016
13:05:42
group_id я указываю.

VSKut
20.12.2016
13:05:52
ты когда постишь что-то - нормальн объясняйся

Wild
20.12.2016
13:06:16
а вот type бывает = group, comments, message, wall, board
и мне нужно узнать, сколько есть строк, с readed=false, по каждому типу уведомлений, у группы

VSKut
20.12.2016
13:06:42
ну так а что тебе посчитать нужно?
группируй по типам,
с выборкой по false
что сложного?
я ведь дал пример
как формировать подобное

Wild
20.12.2016
13:08:53
<?php
Notify::select(DB::raw('COUNT(*) as count, type'))->whereIn('type', ['comment','message','wall', 'board', 'group'])->groupBy('type');
Но вот куда указать id группы, о которой хотим получить уведомления?

VSKut
20.12.2016
13:09:30
->where('group_id',$id)
->whereIn('type', ['comment','message','wall', 'board', 'group'])
это тут не нужно
хотя и так, и так будет работать

i
20.12.2016
13:11:47
сначала на sql запрос напиши

VSKut
20.12.2016
13:12:44

Arthur
20.12.2016
13:13:05
человек не может сформулировать что ему надо -> не понимает какой запрос в итоге должен получиться -> не знает что делать с orm

Google

i
20.12.2016
13:14:48
и вообще premature optimization

VSKut
20.12.2016
13:17:37
1) нужно получить количество строк по каждому type - группируем по type
2) делаем select числа от каждого сгруппированного количества и выводить через функцию count()
3) производим все остальные условия для выборки
всё довольно просто

i
20.12.2016
13:20:10
там будут вложенные селекты
мне кажется, ORM для такого запроса будет лишним

VSKut
20.12.2016
13:21:49
зачем?
нет там никаких вложенных селектов
всё элементарно и просто

i
20.12.2016
13:22:21
ты говоришь как заказчик

VSKut
20.12.2016
13:22:54
w8 a sec
сейчас вот специально для тебя сделаю подобный запрос и покажу sql, который сформируется
"select COUNT(*) as count, language from users where referral_status = ? group by language"

VSKut
20.12.2016
13:25:45
$users = \App\User::select(\Illuminate\Support\Facades\DB::raw('COUNT(*) as count, language'))->where('referral_status',0)->groupBy('language')->toSql();
easy

Wild
20.12.2016
13:27:23
$data = CallBack::where('community_id', '=', $this->config['group_id'])->get();
$data->groupBy('type')->each(function($group) { dump($group->where('status', '=', 'new')->count() );});
Есть такое
Но выдает мне по всем типам результат
Общий так сказать, вместо нескольоких

VSKut
20.12.2016
13:28:14
Чувак, я тебе только что дал полностью всю инфу - просто замени поля и модельку на свои
это ведь copy-paste

Google

VSKut
20.12.2016
13:29:18
$data->groupBy('type')->each(function($group) { dump($group->where('status', '=', 'new')->count() );});
вот это, думается, работает уже через коллекции, а не sql
но в любом случае считать всё по отдельности - бредовая затея
mysql делает это куда быстрее

Wild
20.12.2016
13:30:32
CallBack::select(DB::raw('COUNT(*) as count, type'))->whereIn('type', ['comment','message','wall', 'board', 'group'])->groupBy('type')
В ответ получаю ничего

VSKut
20.12.2016
13:31:56
<?php
$users = \App\CallBack::select(\Illuminate\Support\Facades\DB::raw('COUNT(*) as count, type'))->where('community_id',$this->config['group_id'])->where('status','new')->groupBy('type')->get();

Wild
20.12.2016
13:34:02
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'type' in 'field list' (SQL: select COUNT(*) as count, type from callbacks where community_id = 1 and status = new group by type)
Это мой косяк

Admin
ERROR: S client not available

VSKut
20.12.2016
13:34:54
Вопрос ко мне или к кому? :)
в модельке нет поля

Wild
20.12.2016
13:37:45
Заработало, спасибо

VSKut
20.12.2016
13:41:03
?

Wild
20.12.2016
13:43:31
ИНдексы при сортировке всегда разные
видимо не подойдет метод :(

VSKut
20.12.2016
13:46:57
ещё, помнится, в mysql есть сводные таблицы или что-то такое
можешь посмотреть в это направление

Wild
20.12.2016
13:47:17
Перепроверил, вроде индексы не меняет
$notify[0]['count']; это по type обсуждения
$notify[1]['count']; это по type комментарии

Google

Wild
20.12.2016
13:48:20
Но нужно еще и isset проверять
Потому что если новых уведомлений нету, выдаст ошибку

VSKut
20.12.2016
13:49:05
if внедряй в db::raw()
мол если count 0, то бла бла бла

Wild
20.12.2016
13:49:33
count может быть > 0
а вот cout по нужному типу
0

VSKut
20.12.2016
13:50:30
я понятия не имею о чём ты
если нужно выбирать в массив только то, где count > 0
то добавь where('count','>','0')

Quiss
20.12.2016
13:55:45
'>','0' ??
почему 0 как стринга

VSKut
20.12.2016
14:01:54

Quiss
20.12.2016
14:02:08
как это нет разницы, наркоман чтоле?
пиши правильно

VSKut
20.12.2016
14:02:21
лол
можешь ещё пробельчики в чатике расставить?

Quiss
20.12.2016
14:03:04
было бы не плохо ))

Михаил
20.12.2016
14:04:28

VSKut
20.12.2016
14:05:30

Михаил
20.12.2016
14:06:12