1 миллион строк)
name[0] = myname
price[0] = 100
name[1] = myname
price[1] = 120
Мне надо удалить повторяющиеся значения name и оставить только с минимальным значением price
Как реализовать? Что-то смотрел в сторону unique() но она работает очень долго
Группируй по name и получи минимальную цену в группе
массив извлекается вот так $prices = DB::table('prices')->where('supplier', $request->supplier)->get(); иммется ввиду добавить сюда groupby?
Да, и withMin попробуй - если не будет такого метода - тогда через withAggregate
Хорошо, спасибо сейчас попробую
$prices = DB::table('prices')->where('supplier', $request->supplier)->groupby('name')->get(); SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column
Ну и select ограничить, select('name') А если не получится через withAggregate, тогда через selectRaw
Ну вам бы сходить подучить основы БД ))
У вам там несколько id, created_at, updated_at, например - оно не знает какой именно брать и просит явно указать
Получается, вот так $prices = DB::table('prices')->where('supplier', $request->supplier)->groupby('id','name')->get(); Правильно делаю?
Нет, тогда у вас не получится агрегировать - вм нужно просто ограничить select-ом нужные колонки - name
$visitors = DB::table('visitors') ->select(DB::raw('count(*) as visitor_count, is_active')) ->where('is_active', '<>', 1) ->groupBy('is_active') ->get();
теперь что то из этого делать?))
Да не, там скорее для другого
Обсуждают сегодня