Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » Помогите составить SQL-запрос

Модерирует : Cheery

Cheery (07-11-2013 22:20): MySQL Помогите составить запрос  Версия для печати • ПодписатьсяДобавить в закладки

   

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".
 
Я что-то никак не могу им мозгов дать... Слишком монстроузная конструкция для моего понимания получается )

Всего записей: 126 | Зарегистр. 16-12-2007 | Отправлено: 14:58 04-11-2013
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
sardvd
есть же тема
MySQL Помогите составить запрос

Цитата:
Муть немного, да?

лучше бы сброить небольшой дамп, чтобы уже на примере него проверить запрос

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 22:54 04-11-2013
sardvd

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
прошу прощения... Сделал репост в ту тему.
С дампом сложно, потому что на самом деле пример прилично упрощен.

Всего записей: 126 | Зарегистр. 16-12-2007 | Отправлено: 23:23 04-11-2013
   

Компьютерный форум Ru.Board » Интернет » Web-программирование » Помогите составить SQL-запрос
Cheery (07-11-2013 22:20): MySQL Помогите составить запрос


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru