|
Помогите составить супер сложный запрос
|
|||
---|---|---|---|
#18+
Здравствуйте! Возможно ли такую выборку одним запросом сделать? Есть 3 таблицы: products _____ id | name 1 | tovar1 2 | tovar2 3 | tovar3 4 | tovar4 5 | tovar5 sklads _____ id | name | delivery_time (срок доставки, дней) 1 | sklad1 | 10 2 | sklad2 | 20 3 | sklad3 | 30 product_to_sklad _____ id_product | id_sklad | price (цена товара на складе) | count (количество товара на складе) 1 | 1 | 1000 | 4 1 | 2 | 2000 | 5 2 | 1 | 3000 | 3 2 | 2 | 4000 | 4 3 | 1 | 5000 | 1 3 | 3 | 6000 | 3 3 | 2 | 7000 | 3 У каждого товара из таблицы products может быть несколько складов из таблицы sklads, для этого создана таблица product_to_sklad. Нужно при выборке товаров выбрать только 1 склад для каждого товара, удовлетворяющий нескольким условиям: 1. Количество товара на складе не менее 4 штук и минимальный срок доставки 2. Если нет склада удовлетворяющего первое условие, то выбирать склад с наибольшим количеством и наименьшим сроком доставки 3. Если склад не выбран первым двум условиям, то товар выводить, но без данных по складу На выходе должно получиться: id | name | id_sklad | delivery_time | price | count 1 | tovar1 | 1 | 10 | 1000 | 4 2 | tovar2 | 2 | 20 | 4000 | 4 3 | tovar3 | 2 | 20 | 7000 | 3 4 | tovar4 | | | | 5 | tovar5 | | | | Может я преувеличил с супер сложностью, но у меня в 1 запрос это все реализовать не получается, реализовал так, сначала выбираю все товары, далее foreach по товарам с выборкой всех складов и выбор подходящего склада php-условиями, все работает замечательно, за исключением того, что нет возможности сделать сортировку товаров по цене и количеству, так как в первичной выборке этого нет. Помогите пожалуйста гуру mysql-запросов! ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2019, 17:02 |
|
Помогите составить супер сложный запрос
|
|||
---|---|---|---|
#18+
Vladimir_KZN 1. Количество товара на складе не менее 4 штук и минимальный срок доставки Это два условия. И результат наличия такой записи зависит от порядка их применения. Vladimir_KZN 2. Если нет склада удовлетворяющего первое условие, то выбирать склад с наибольшим количеством и наименьшим сроком доставки ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2019, 20:31 |
|
Помогите составить супер сложный запрос
|
|||
---|---|---|---|
#18+
На всякий случай - сделал fiddle . Вдруг кто захочет покрутить... В принципе-то несложная задача, если сделать чётким условие. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2019, 20:44 |
|
Помогите составить супер сложный запрос
|
|||
---|---|---|---|
#18+
Akina, спасибо за ответ. Уточню условие, буду использовать if/else для большей ясности if (Количество товара на складе не менее 4 штук) { выбираем с минимальным сроком доставки } else if (выбираем склады с наибольшим количеством) { выбираем с минимальным сроком доставки } ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2019, 09:19 |
|
Помогите составить супер сложный запрос
|
|||
---|---|---|---|
#18+
Лучше так: 1. Если имеются склады с количеством не менее 4 - вернуть склад с наименьшим сроком доставки, если таких несколько, вернуть склад с [указать однозначное условие, либо продолжить цепочку] иначе 2. Если имеются склады с этим товаром - вернуть склад с наибольшим количеством, если таких несколько - вернуть склад с наименьшим сроком доставки, если таких несколько, вернуть склад с [указать однозначное условие, либо продолжить цепочку] иначе 3. Вернуть NULL. Заполните недостающее. Условие может быть любым (да хоть первый в алфавитном порядке), и необязательно одно и то же в разных пунктах. Условие "первый попавшийся" - нежелательно. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2019, 10:20 |
|
Помогите составить супер сложный запрос
|
|||
---|---|---|---|
#18+
Akina, Все склады имеют разный срок доставки, но на всякий случай тогда дополню Как то так: 1. Если имеются склады с количеством не менее 4 - вернуть склад с наименьшим сроком доставки, если таких несколько, вернуть склад первый в алфавитном порядке иначе 2. Если имеются склады с этим товаром - вернуть склад с наибольшим количеством, если таких несколько - вернуть склад с наименьшим сроком доставки, если таких несколько, вернуть склад первый в алфавитном порядке иначе 3. Вернуть NULL. Также я попытался реализовать запрос, выводит только 1 товар, далее разобраться не могу. Вот что получилось Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2019, 10:28 |
|
Помогите составить супер сложный запрос
|
|||
---|---|---|---|
#18+
Akina, буду очень признателен, если вы мне поможете ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2019, 11:53 |
|
Помогите составить супер сложный запрос
|
|||
---|---|---|---|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
fiddle ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2019, 12:16 |
|
Помогите составить супер сложный запрос
|
|||
---|---|---|---|
#18+
Akina, Просто супер, работает, спасибо Вам!!! Вот только проблема, у меня MySQL 5.7. Как можно адаптировать запрос под мою версию? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2019, 12:30 |
|
Помогите составить супер сложный запрос
|
|||
---|---|---|---|
#18+
Vladimir_KZN у меня MySQL 5.7. Как можно адаптировать запрос под мою версию? Можно. Заменяйте оконные функции соотв. коррелированными подзапросами, а итоговый CTE переносите в секцию FROM. Но имхо разумнее таки обновить версию - сколько можно на старье-то работать? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2019, 12:51 |
|
Помогите составить супер сложный запрос
|
|||
---|---|---|---|
#18+
Akina, Как то так? Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
Ругается на "OVER (PARTITION ... " ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2019, 13:27 |
|
Помогите составить супер сложный запрос
|
|||
---|---|---|---|
#18+
Vladimir_KZN Ругается на "OVER (PARTITION ... " Akina Заменяйте оконные функции соотв. коррелированными подзапросами ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2019, 13:42 |
|
Помогите составить супер сложный запрос
|
|||
---|---|---|---|
#18+
Akina, эх, если бы я знал что такое оконные функции... , то наверное бы смог заменить. А так я прошу вашей помощи снова ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2019, 13:50 |
|
Помогите составить супер сложный запрос
|
|||
---|---|---|---|
#18+
Не, слишком это муторно. Мне - лень. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2019, 14:09 |
|
Помогите составить супер сложный запрос
|
|||
---|---|---|---|
#18+
Akina, Я так понимаю это Код: sql 1.
оконная функция? Может на словах объясните на какой подзапрос ее нужно поменять? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2019, 14:18 |
|
Помогите составить супер сложный запрос
|
|||
---|---|---|---|
#18+
Кто то еще может предложить решение? Для MySQL 5.7? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2019, 16:10 |
|
Помогите составить супер сложный запрос
|
|||
---|---|---|---|
#18+
Vladimir_KZN Нужно при выборке товаров выбрать только 1 склад для каждого товара, удовлетворяющий нескольким условиям: 1. Количество товара на складе не менее 4 штук и минимальный срок доставки 2. Если нет склада удовлетворяющего первое условие, то выбирать склад с наибольшим количеством и наименьшим сроком доставки 3. Если склад не выбран первым двум условиям, то товар выводить, но без данных по складу Вот эти условия author1. минимальный срок доставки 2. Если нет склада удовлетворяющего первое условие, то выбирать склад с наибольшим количеством и наименьшим сроком доставки 3. Если склад не выбран первым двум условиям, то товар выводить, но без данных по складу очень плохо будет делать через один запрос Даже если это можно написать, (в чём я не сомневаюсь) делать это не нужно, напиши процедуру или программную логику. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2019, 16:18 |
|
Помогите составить супер сложный запрос
|
|||
---|---|---|---|
#18+
MasterZiv Vladimir_KZN Нужно при выборке товаров выбрать только 1 склад для каждого товара, удовлетворяющий нескольким условиям: 1. Количество товара на складе не менее 4 штук и минимальный срок доставки 2. Если нет склада удовлетворяющего первое условие, то выбирать склад с наибольшим количеством и наименьшим сроком доставки 3. Если склад не выбран первым двум условиям, то товар выводить, но без данных по складу Вот эти условия author1. минимальный срок доставки 2. Если нет склада удовлетворяющего первое условие, то выбирать склад с наибольшим количеством и наименьшим сроком доставки 3. Если склад не выбран первым двум условиям, то товар выводить, но без данных по складу Не совсем понял что вы имеете ввиду MasterZiv очень плохо будет делать через один запрос Даже если это можно написать, (в чём я не сомневаюсь) делать это не нужно, напиши процедуру или программную логику. Нужно именно одним запросом Вы можете мне помочь? Под MySQL 5.7? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2019, 17:16 |
|
Помогите составить супер сложный запрос
|
|||
---|---|---|---|
#18+
Задачка актуальна. Прошу помочь составить запрос ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2019, 18:02 |
|
Помогите составить супер сложный запрос
|
|||
---|---|---|---|
#18+
Up ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2019, 12:48 |
|
Помогите составить супер сложный запрос
|
|||
---|---|---|---|
#18+
Не совсем понял что вы имеете ввиду Что же тут может быть непонятного? Русским же языком написано. MasterZiv очень плохо будет делать через один запрос Даже если это можно написать, (в чём я не сомневаюсь) делать это не нужно, напиши процедуру или программную логику. Нужно именно одним запросом НЕ НУЖНО одним запросом Вы можете мне помочь? Под MySQL 5.7? Я даже не буду пытаться. Это бесполезно. Запрос в реальной жизни работать не будет быстро. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2019, 14:07 |
|
|
start [/forum/topic.php?fid=47&msg=39898538&tid=1828814]: |
0ms |
get settings: |
7ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
155ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
others: | 300ms |
total: | 545ms |
0 / 0 |