|
|
|
Помогите составить сложный запрос, пожалуйста
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Прошу помощи. Дано: таблица с товарами Goods, таблица с каталогом Catalog и таблица соответствий товаров разделу каталога gDep. Например, раздел каталога "Тетрадки" имеет id = 3. А товар "Тетрадка с Человеком-пауком" (его id = 1) относится и к разделу "Тетрадки", и к разделу "Человек-паук" (у которого id = 5). По этому поводу в таблице gDep есть такие записи: gId = 1 gSub = 3 gId = 1 gSub = 5 Соответственно, когда мы попадаем в раздел каталога "Тетрадки", то мы выводим товар таким запросом: SELECT * FROM gDep LEFT JOIN Goods ON gDep.gId = Goods.Id WHERE gDep.gSub = '3' Вроде все просто и понятно. Но есть задача все это добро усложнить. И сделать сортировку результатов по наличию товара. То есть, чем больше товара сейчас в наличии, тем выше его позиция в выдаче. Для этого нужно узнать, сколько единиц товара было получено, сколько единиц продано, посчитать разницу и сделать сортировку по этой разнице в обратном порядке. Копаем дальше. Есть таблица Orders. В ней есть поле oSupplier, которое если имеет значение 0 - то это продажа товара, а если не 0 - то это приход товара. А еще есть поле State, которое если больше 2 - то этот заказ полностью обработан. И есть таблица OrdersContent, в которой указаны конкретные id товара, ну и естественно ссылка на таблицу Orders, т.е. к какому именно заказу относится приход/расход этого товара. Муть немного, да? Постараюсь раскидать код, как подчет ведется сейчас. SELECT CAST(SUM(IF(Orders.oSupplier <> 0 AND Orders.State > 2, OrdersContent.Col, 0)) as UNSIGNED) AS TotalShip, _ CAST(SUM(IF(Orders.oSupplier = 0 AND Orders.State > 0, OrdersContent.Col, 0)) as UNSIGNED) AS TotalSold _ FROM OrdersContent _ LEFT JOIN Orders _ ON OrdersContent.OrderId = Orders.oId _ WHERE OrdersContent.Good = '1' Выполнив на странице товара этот запрос, мы получам общее количество полученного товара TotalShip и обще количество проданного товара TotalSold. Вот в принципе, нужно как-то первый запрос вывода товара в каталоге (с одним LEFT JOIN) объединить со вторым запросом подсчета количества полученного/проданного товара (с другим LEFT JOIN), да еще и так, чтобы в первом запросе можно было приписать "ORDER BY TotalShip-TotalSold DESC". Я что-то никак не могу им мозгов дать... Слишком монстроузная конструкция для моего понимания получается ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2013, 15:07:02 |
|
||
|
Помогите составить сложный запрос, пожалуйста
|
|||
|---|---|---|---|
|
#18+
Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2013, 20:12:03 |
|
||
|
|

start [/forum/topic.php?fid=47&fpage=202&tid=1835790]: |
0ms |
get settings: |
8ms |
get forum list: |
20ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
51ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
22ms |
get tp. blocked users: |
1ms |
| others: | 197ms |
| total: | 315ms |

| 0 / 0 |
