sardvd
Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Здравствуйте. Прошу помощи. Дано: таблица с товарами 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". Я что-то никак не могу им мозгов дать... Слишком монстроузная конструкция для моего понимания получается ) |