2013-04-16 2 views
1

Я пытаюсь настроить пользователей на основе количества строк в базе данных с идентификатором.
Моего набор данных выглядеть следующим образом (упрощенный):Laravel Оценка правдивых данных

A .... John 
A .... John 
B .... Mike 
A .... John 
B .... Mike 
C .... Denis 

Я хочу, чтобы первые три уникальных имен, заказанных сколько раз появляется значение слева.
Могу ли я сделать это с красноречивым ORM от Laravel?

Результат будет такой:

John 
Mike 
Denis 

Благодаря

+0

Вы хотите конкретно использовать решение laravel? Или решение «чистого sql» может работать на вас? – Barranka

+0

Ну, и то и другое .. :) Мне было просто любопытно о Красноречии – intelis

ответ

4

Так вы делаете это с Larvel's Eloquent ORM

Model::select('name') 
->groupBy('name') 
->orderBy(DB::raw('count(name)'), 'desc') 
->take(3) 
->get(); 

Если вы используете Laravel 3 затем используют змеиный случай:

Model::select('name')->group_by('name')->order_by(DB::raw('count(name)'), 'desc')->take(3)->get(); 

Если вы хотите, вы можете просто использовать Query Builder (свободный) с помощью DB::table('tableName')-> вместо Model::.

Примечания:

  • DB::raw() инструктирует Laravel не ставить backtics там.
  • take() ограничивает ряды.
0

Не Laravel решение, но он может работать (чистый SQL, в частности, MySQL):

select name 
from yourTable 
where ... # Your filter conditions go here 
group by name 
order by count(id) desc 
limit 3; 

Надеется, что это помогает

Смежные вопросы