Mysql выберите из одной таблицы

Моя структура таблицы

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');

Что пробовали сами?

FJT 20.04.2018 20:14

нужно сгруппировать по 2 полям: sell_type и product_id

cryptodoxer 20.04.2018 20:15

Что ты уже испробовал??????

Eric 20.04.2018 20:47
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
1
3
43
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

попробуйте этот выборочный запрос

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

cryptodoxer 20.04.2018 20:11

тогда какой тип данных вам нужен. ??

Anfath Hifans 20.04.2018 20:12

select product_id имеет только 2 sell_type: buy & sell. если у product_id есть только sell или by - не нужно

cryptodoxer 20.04.2018 20:13

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, «ПРОДАТЬ», «ЗАПОЛНЕНО»);

cryptodoxer 20.04.2018 21:11
Ответ принят как подходящий

Вы можете использовать группу по и подсчету (отдельное 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

что значит "не работают" ... у вас ошибка? показать сообщение об ошибке ... неправильный результат покажет ваш ожидаемый результат, и вы получите результат и правильный (чистый) образец данных для ожидаемого результата

scaisEdge 20.04.2018 20:53

обновите свой вопрос и покажите четкую и точную выборку данных и соответствующий ожидаемый результат.

scaisEdge 20.04.2018 20:56

СОЗДАТЬ ТАБЛИЦУ 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, «ПРОДАТЬ», «ЗАПОЛНЕНО»);

cryptodoxer 20.04.2018 21:07

Если вы не объявляете ожидаемый результат и не изменяете ... срок образца ... вы не играете честно ... в любом случае sqlfddle возвращает 1 и 2 для идентификатора продукта ... как с FILLED, так и с BUY и SELL

scaisEdge 20.04.2018 21:25

Спасибо за помощь. извините за мою ошибку, английский не мой родной язык

cryptodoxer 20.04.2018 21:29

Но мне нужно выбрать product_id, у которого есть ОБА на продажу и на покупку.

cryptodoxer 20.04.2018 21:30
sqlfiddle.com/#!9/c41301/2 возвращает 1 .. ПРОДАЖА и КУПИТЬ оба .. не 2 или 3 (только ПРОДАЖА, только КУПИТЬ)
scaisEdge 20.04.2018 21:30

попробуй это

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

sqlfiddle.com/#!9/b895ba/1 если у нас 2 продажи или покупки - не работает
cryptodoxer 20.04.2018 21:36

проверьте это сейчас @cryptodoxer здесь: sqlfiddle.com/#!9/464959/2 и обновите ответ тоже

Anfath Hifans 20.04.2018 21:38

Другие вопросы по теме