Статус партнерства с 1С-Битрикс: Бизнес партнер
  • Маркетплейс
  • Софт
  • Документация
  • Блог
  • Новости
  • Профиль
  • Одним SQL запросом несколько элементов из разных категорий

    07.04.2017

    Существует типовая задача вывести несколько статей из различных категорий одним списком выполнив только один запрос к базе данных. Привожу мое решение для MySQL.

    Исходными таблицами являются таблица разделов sec и таблица элементов elem. В таблице elem для связи с разделами поле sec

    create table sect (
    	id int primery key auto_increment,
    	name varchar(16)
    );
    create table elem (
    	id int primery key auto_increment,
    	sec int not null,
    	name varchar(16)
    );
    

    Ниже решение. Стоит обратить внимание на сортировку: в первую очередь по разделам, во вторую - согласно условиям конкретной задачи

    Для примера я поставил "задачу": отобрать из всех категорий первые (по ID) два элемента

    set @rank = 0;
    set @cursec = -1;
    select sname, ename from (
    	select 
    		s.name sname,
    		e.name ename, 
    		(IF (@cursec != s.id,(@rank := 1),(@rank := @rank + 1))) RANK, 
    		@cursec := s.id CURSEC
    	from sect s
    	left join elem e on e.sec = s.id
    	order by s.id,e.id
    ) temp
    where rank <= 2;
    

    Все записи

    © 2001-2017 Воробьев Александр