MySQL, выполните запрос, который выбирает и фильтрует результаты - PullRequest
0 голосов
/ 06 октября 2018

У меня есть таблица с такой структурой:

id          seller          class           ref             color       pricekg

1           manta           apple           apple-red       red         0.147
2           manta           pear            pear-green      green       0.122
3           poma            apple           apple-red       red         0.111
4           arnie           melon           melon-green     green       0.889
5           pinas           pineapple       pinneaple-brown brown       0.890
6           gordon          apple           apple-red       red         0.135

Мне нужно было бы получить фрукты от некоторых продавцов с некоторыми предпочтениями.

Моя первая цель - узнать, кто что продаетя ищу, и после того, как я знаю это, выберите лучший.

Когда я делаю первый запрос, я получаю это:

Запрос ->

SELECT *  
FROM  `fruits`   
WHERE  `seller`  
IN ("manta",  "poma",  "pinas",  "gordon")  
AND  `class` IN ("apple",  "pineapple")  
ORDER BY id  

Результат1 ->

1           manta           apple           apple-red       red         0.147
3           poma            apple           apple-red       red         0.111
5           pinas           pineapple       pinneaple-brown brown       0.890
6           gordon          apple           apple-red       red         0.135

Пока все хорошо, но у меня есть 3 продавца, у которых красное яблоко с яблочно-красным реф.

Теперь эту часть я не могу решить...

С этим результатом я хотел бы отфильтровать дубликаты ссылок на яблоки (так как я хочу купить у одного продавца).

Если есть дубликаты, выберите тот с манта продавца.

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

Итак, после результата 1 второй запрос (или подзапрос,или если есть способ сделать все это в одном запросе, я действительно не знаю, что было бы лучшим способом)Результат будет:

1           manta           apple           apple-red       red         0.147
5           pinas           pineapple       pinneaple-brown brown       0.890

Или, если Манта не продаст их, это будет:

3           poma            apple           apple-red       red         0.111
5           pinas           pineapple       pinneaple-brown brown       0.890

Возможно ли это сделать только одним запросом?Или я могу как-то сделать представление из таблицы результатов или временной таблицы, а затем выполнить еще один запрос для фильтрации дубликатов.Как я мог это сделать?

1 Ответ

0 голосов
/ 06 октября 2018

Это запрос расстановки приоритетов.

Я думаю, вы хотите:

select f.*  
from fruits f
where f.seller in ('manta', 'poma', 'pinas', 'gordon') and 
      f.class in ('apple', 'pineapple') and
      f.id = (select f2.id
              from fruits f2
              where f2.seller in ('manta', 'poma', 'pinas', 'gordon') and 
                    f2.class in ('apple', 'pineapple') and
                    f2.ref = f.ref
              order by (f2.seller = 'manta') desc,  -- put manta sellers first
                       f2.price asc                 -- then order by lowest price
              limit 1
             );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...