У меня есть таблица в MYSql, называемая компаниями, и у каждой компании есть тип, например, тип 1, тип 2, тип 3,

Пример :

id   company_name   company_type
===============================
1    test1          3
2    xyz            2
3    ashdasdjk      2 
4    test 4         1 
5    test           3 
6    ahsdkjsg       1
7    TCS            2
and so on ...

Теперь я хочу написать запрос для получения результатов, так что я получу 20 компаний типа 1, 20 компаний типа 2 и 20 компаний типа 3 ... я имею в виду, что я хочу получить максимум 20 компаний каждого типа

Я использую Codeigniter ..

6
Mohan 14 Мар 2014 в 12:15
Что определяет, какие 20 экземпляров каждого типа вы хотите получить?
 – 
fancyPants
14 Мар 2014 в 12:18
Я просто хочу, чтобы запрос получил всего 60 результатов по 20 каждого типа ..
 – 
Mohan
14 Мар 2014 в 12:19
Ваша таблица будет содержать всего 60 результатов! ... пожалуйста, опишите сценарий
 – 
Sureshkumar Panneerselvan
14 Мар 2014 в 12:39
Да .. я хочу максимум 60 результатов в моей таблице, из которых должно быть максимум 20 результатов каждого типа ..
 – 
Mohan
14 Мар 2014 в 12:40
Вы хотите каждый раз один и тот же результат или хотите образцы, которые мне нужно знать ...
 – 
Sureshkumar Panneerselvan
14 Мар 2014 в 12:43

1 ответ

Лучший ответ
select * from (
    select
    c.*,
    @rn := if(company_type != @ct, 1, @rn + 1) as rownumber,
    @ct := company_type
    from
    companies c
    , (select @rn := 0, @ct := null) var_init
    order by
    company_type
) comp
where rownumber <= 20;
3
fancyPants 14 Мар 2014 в 12:23
Спасибо .. приятель .. ты лучший человек на всей планете ... не могли бы вы прислать мне несколько хороших ссылок для изучения mysql .... чтобы улучшить мой уровень программирования ... пожалуйста.
 – 
Mohan
14 Мар 2014 в 12:47
Эй .. я действительно lyk dat way .. bt nvr использовал это .. так что ..
 – 
Mohan
14 Мар 2014 в 15:40
Подробнее об этом можно узнать здесь: dev.mysql.com/ doc / refman / 5.6 / en / user-variables.html И небольшой совет: пожалуйста, используйте правильный английский язык, когда разговариваете с кем-то, кого вы не знаете. Некоторые обижаются, потому что не хотят, чтобы с ними обращались так, как будто они из гетто. А некоторые просто думают, что это / выглядит отсталым. Я не принадлежу ни к одной из этих групп, но считаю, что это немного неуважительно. Без обид, только мои 2 цента.
 – 
fancyPants
14 Мар 2014 в 16:29
Спасибо за ссылку и извините за сленг ... любыми способами, которые я использовал по вашей ссылке. Я думаю, что могу понять остальную часть запроса, но я не могу получить именно эту строку (select @rn := 0, @ct := null) var_init, если вы могли бы объяснить ..
 – 
Mohan
14 Мар 2014 в 16:49
1
Это просто причудливый способ инициализации переменной внутри запроса. Если написать SET @rn := 0; SET @ct := NULL; перед запросом на выборку и пропустить его в запросе, это даст тот же эффект.
 – 
fancyPants
14 Мар 2014 в 16:53