Есть такой запрос:
SELECT *
FROM (SELECT `category`
FROM `publication`
WHERE `publication`.`category` = 2
LIMIT 0,50) AS D1
, (SELECT `category`
FROM `publication`
WHERE `publication`.`category` = 1
LIMIT 0,50) AS D2
в переменную прихдят лишь
` WHERE `publication`.`category` = 1`
т.е. только D2. как обьединить D1 и D2?
вот видете два поля приходит. Одна с категорией 1 вторая категорией 2. Как сделать чтобы это было в одном поле. Вобще там кроме категорий будет много полей
Если я что-нибудь понял, простейший способ - UNION:
(SELECT 1 FROM `publication` WHERE `category` = 1 LIMIT 50)
UNION ALL
(SELECT 2 FROM `publication` WHERE `category` = 2 LIMIT 50)
Второй вариант задачи:
Попробуй поставить разные алиасы. Может у тебя где-то category перетираются в ассоциативном фетче
SELECT *
FROM (SELECT `category` d1
FROM `publication`
WHERE `publication`.`category` = 2
LIMIT 0,50) AS D1
, (SELECT `category` d2
FROM `publication`
WHERE `publication`.`category` = 1
LIMIT 0,50) AS D2
Попытка решить в общем виде:
select category
from
(
select p.category,
(@num:=if(@group=category, @num+1, if(@group:=category, 1, 1))) row_number
from publication
CROSS JOIN (select @num:=0, @group:=null) c
order by category
) as x
where x.row_number <= 50;
Лимитирование осуществлено раздельно для каждой категории(@group) с помощью переменной-счётчика(@num).
Демонстрация
Сборка персонального компьютера от Artline: умный выбор для современных пользователей