Моя структура таблицы
id;product_id;sell_type;sell_state
sell_type: BUY, SELL
sell_state: OPEN, FILLED, CANCELED
Как выбрать только product_id при каждой 2 операции, BUY & SELL в sell_type и FILLED в sell_state
CREATE TABLE `orderlist` (
`id` int(10) UNSIGNED NOT NULL,
`product_id` int(11) NOT NULL,
`sell_type` enum('BUY','SELL') DEFAULT NULL,
`sell_state` enum('OPEN','FILLED','CANCELED') DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `orderlist` (`id`, `product_id`, `sell_type`, `sell_state`) VALUES
(7, 1, 'BUY', 'FILLED'),
(8, 1, 'SELL', 'FILLED'),
(9, 2, 'BUY', 'FILLED'),
(10, 3, 'SELL', 'FILLED');
нужно сгруппировать по 2 полям: sell_type и product_id
Что ты уже испробовал??????






попробуйте этот выборочный запрос
SELECT t1.*
FROM temp t1
INNER JOIN temp t2
ON t1.product_id = t2.product_id AND FIND_IN_SET('FILLED',t1.sell_state) > 0
WHERE FIND_IN_SET('BUY',t1.sell_type) > 0 AND
CONCAT(",", t2.sell_type, ",") REGEXP ",(BUY|SELL),"
GROUP BY t1.product_id
демо: http://sqlfiddle.com/#!9/7fcd9/64
Нет, нужно выбрать, у кого есть каждый sell_type
тогда какой тип данных вам нужен. ??
select product_id имеет только 2 sell_type: buy & sell. если у product_id есть только sell или by - не нужно
CREATE TABLE список заказов (id int (10) UNSIGNED NOT NULL, product_id int (11) NOT NULL, sell_type enum ('BUY', 'SELL') DEFAULT NULL, sell_state enum ('OPEN', 'FILLED', 'CANCELED') ПО УМОЛЧАНИЮ NULL) ENGINE = InnoDB СИМВОЛЫ ПО УМОЛЧАНИЮ = latin1; INSERT INTO orderlist (id, product_id, sell_type, sell_state) VALUES (7, 1, 'BUY', 'FILLED'), (8, 1, 'SELL', 'FILLED'), (9, 2, 'BUY', «ЗАПОЛНЕНО»), (10, 3, «ПРОДАТЬ», «ЗАПОЛНЕНО»);
Вы можете использовать группу по и подсчету (отдельное sell_state) = 2
select product_id
from orderlist
where sell_state ='FILLED'
and sell_type in ('BUY', 'SELL')
group by product_id
having count(distinct sell_type) = 2
http://sqlfiddle.com/#!9/c41301/2
что значит "не работают" ... у вас ошибка? показать сообщение об ошибке ... неправильный результат покажет ваш ожидаемый результат, и вы получите результат и правильный (чистый) образец данных для ожидаемого результата
обновите свой вопрос и покажите четкую и точную выборку данных и соответствующий ожидаемый результат.
СОЗДАТЬ ТАБЛИЦУ orderlist (id int (10) UNSIGNED NOT NULL, product_id int (11) NOT NULL, sell_type enum ('BUY', 'SELL') DEFAULT NULL, sell_state enum ('OPEN', 'FILLED', 'CANCELED') ПО УМОЛЧАНИЮ NULL) ENGINE = InnoDB СИМВОЛЫ ПО УМОЛЧАНИЮ = latin1; ВСТАВИТЬ В orderlist (id, product_id, sell_type, sell_state) ЗНАЧЕНИЯ (7, 1, «КУПИТЬ», «ЗАПОЛНЕНО»), (8, 1, «ПРОДАТЬ», «ЗАПОЛНЕНО»), (9, 2, «ПОКУПАТЬ», «ЗАПОЛНЕНО»), (10, 3, «ПРОДАТЬ», «ЗАПОЛНЕНО»);
Если вы не объявляете ожидаемый результат и не изменяете ... срок образца ... вы не играете честно ... в любом случае sqlfddle возвращает 1 и 2 для идентификатора продукта ... как с FILLED, так и с BUY и SELL
Спасибо за помощь. извините за мою ошибку, английский не мой родной язык
Но мне нужно выбрать product_id, у которого есть ОБА на продажу и на покупку.
попробуй это
SELECT product_id
FROM orderlist
WHERE sell_state = 'FILLED' AND sell_type IN ('BUY','SELL')
GROUP BY product_id
HAVING COUNT(product_id) > 2
демо: http://sqlfiddle.com/#!9/464959/2
проверьте это сейчас @cryptodoxer здесь: sqlfiddle.com/#!9/464959/2 и обновите ответ тоже
Что пробовали сами?