powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Сложный SQL-запрос с 4-мя таблицами вывод товаров на сайте
9 сообщений из 9, страница 1 из 1
Сложный SQL-запрос с 4-мя таблицами вывод товаров на сайте
    #38628753
DenielDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

Готов заплатить денежку, кто поможет написать. Очень нужно, не могу справиться.
Дамп в прикреплении. Спасибо!

Задача:
Создать SQL- запрос, который будет выполнятся через PHP. Такой запрос должен выбрать товары для отображения на сайте. Причем, есть поставщик/владелец сайта (определяется по поле my = 1 (Realizers), его товары при выводе в приоритете (то есть, если даже у поставщиков есть такой же товар (он группируется по barcode, и oem, причем что-то из этого может не совпадать, склеивать, если хоть одно совпало), если для данной категории, есть также товары других поставщиков то должны вывестись также и они, но если у поставщиков есть один и тот же товар, то должен вывестить только товар того поставщика, у которого приоритет выше (есть столбец в Realizers «Priority” - 1,2,3 (приоритет поставщика), если поставщики находятся на одном уровне, то надо вывести того, у которого цена ниже.

Из PHP в запрос подставляется несколько статичных данных:

• Примари ключ владельца сайта (realizer_nbr)
• Номера доступных уровней цен для пользователя (level_nbr IN (…))
• Номера доступных базовых цен (price_nbr IN(…)), они связаны с level_nbr, подставляем это условие только для снижения нагрузки.
• И во WHERE запроса добаляются доп условия is_show = 1/0, ORDER BY sort ASC и т.д.

БД: MySQL

Список таблиц:

• Products – Товары всех поставщиков
• Price – Базовые цены (как бы нулевой уровень цены, для отображения фактически не используется)
• PriceLevels – Уровни цен (1,2,3,4)
• PriceProducts – Цены на товары, уже подсчитанные в соответствии с условиями в Price и PriceLevels.
• Realizers – поставщики товаров, и тот, чей сайт.

Прикладываю уже сделанный SQL-запрос, но он работает не корректно, то есть, вложенный select всегда возвращает один тот же номер реализатора. Поэтому возникает проблема, если у владельца сайта есть какие-нибудь товары для какой нибудь категории из category_code IN(….), то уже не будет товаров других поставщиков. А также помечаю, что realizer_nbr == supplier_nbr (просто в разных ТБ они храняться под разными названиями). А также supplier_nbr – это чей товар, а realizer_nbr это тот, кто торгует.

SELECT `p`.`product_nbr`, `p`.`category_code`, `p`.`supplier_nbr`, `p`.`code`, `p`.`barcode`, `p`.`oem`,
`p`.`name`, `p`.`text`, `p`.`price_src2`, `p`.`preference`, `p`.`status`, `p`.`analog_nbr`, `p`.`is_new`,
`p`.`is_hit`, `p`.`is_hot`, `p`.`is_sync`, `p`.`is_show`, `p`.`is_show_in_site`, `p`.`rate`, `p`.`rate_count`,
`p`.`rate_values`, `p`.`sort`, `p`.`create_date`, `p`.`create_time`, `p`.`sys_create_time`,
`pr`.`price` AS `price_src` FROM `Products` AS `p`
LEFT JOIN `PriceProducts` AS `pr` ON p.code = pr.product_code AND p.supplier_nbr = pr.supplier_nbr
WHERE (p.category_code IN ('dd398b2959dc032ba0ab56d24996c9bc', '-200', '-230', 'dcec901aed2d3e2dc3a9b1685716dbe0'))
AND (p.is_show = 1) AND (p.is_show_in_site = 1) AND (pr.price > 0) AND (pr.realizer_nbr = '1') AND
(pr.level_nbr IN (4,6)) AND (pr.price_nbr IN (5,6)) AND (`p`.`supplier_nbr` IN (1, 3, 5))
AND (pr.supplier_nbr = (
SELECT `r2`.`realizer_nbr` FROM `Products` as `p2`
INNER JOIN `Realizers` AS `r2` ON `p2`.`supplier_nbr` = `r2`.`realizer_nbr`
INNER JOIN `PriceProducts` AS `pr2` ON `p2`.`code` = `pr2`.`product_code` AND `p2`.`supplier_nbr` = `pr2`.`supplier_nbr`
WHERE `r2`.`priority` <> 0
AND `p2`.`category_code` IN ('dd398b2959dc032ba0ab56d24996c9bc','-200','-230','dcec901aed2d3e2dc3a9b1685716dbe0')
AND `pr2`.`price` > 0 AND `pr2`.`realizer_nbr` = '1'
AND `pr2`.`level_nbr` IN (4,6) AND `pr2`.`price_nbr` IN (5,6)
AND `pr2`.`supplier_nbr` = `p2`.`supplier_nbr` AND `p2`.`is_show_in_site` = 1
AND `p2`.`is_show` = 1 AND (`p2`.`supplier_nbr` IN (1,3,5))
GROUP BY r2.realizer_nbr
ORDER by `r2`.`my` ASC,`r2`.`priority`,`pr2`.`price` ASC LIMIT 1)
) GROUP BY `p`.`barcode` ORDER BY `sort` ASC
...
Рейтинг: 0 / 0
Сложный SQL-запрос с 4-мя таблицами вывод товаров на сайте
    #38628789
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DenielDevПричем, есть поставщик/владелец сайта (определяется по поле my = 1 (Realizers), его товары при выводе в приоритете (то есть, если даже у поставщиков есть такой же товар (он группируется по barcode, и oem, причем что-то из этого может не совпадать, склеивать, если хоть одно совпало), если для данной категории, есть также товары других поставщиков то должны вывестись также и они, но если у поставщиков есть один и тот же товар, то должен вывестить только товар того поставщика, у которого приоритет выше (есть столбец в Realizers «Priority” - 1,2,3 (приоритет поставщика), если поставщики находятся на одном уровне, то надо вывести того, у которого цена ниже.автор Мэтт отыскал окошечко с надписью "РЕЗУЛЬТАТ" над ним: там горела
цифра "37". "Ну что ж, - подумал он, - будем стремиться к этому
результату." Мэтт решил пока не снимать цифры с экрана - сначала нужно
прочитать инструкцию.
"После начала теста, - читал он, - единица будет прибавляться к
вашему результату всякий раз, когда вы нажимаете на левую кнопку, если
только это не противоречит условиям, указанным ниже. Нажимайте на
левую кнопку, как только загорается красная лампочка, если только
одновременно не горит зеленая, за исключением того случая, когда не
следует нажимать ни на одну из кнопок, потому что открыта правая
дверца, если только не выключены обе лампочки. Если открыта правая
дверца, а левая закрыта, нажимать на любую из кнопок не надо, потому
что это не отразится на результате, однако на левую кнопку, тем не
менее, нужно нажимать при подобных обстоятельствах, если все остальные
условия позволяют нажимать на кнопку перед тем, как будет зафиксирован
результат в последующих фазах теста. Для того чтобы выключить зеленую
лампочку, нажмите на правую кнопку. Если левая дверца не закрыта, не
следует нажимать на кнопки. Если левая дверца закрыта, пока горит
красная лампочка, не нажимайте на левую кнопку, если выключена зеленая
лампочка, если только не открыта правая дверца. Для начала теста
передвиньте рычаг из нейтрального положения в крайнее правое. Тест
продолжается в течение двух минут с того момента, как рычаг будет
передвинут вправо. Внимательно прочитайте эту инструкцию - можете
потратить на подготовку столько времени, сколько считаете необходимым,
- и лишь после этого приступайте к тесту. Вам запрещено задавать
вопросы экзаменатору, поэтому постарайтесь изучить инструкцию как
можно тщательнее. Постарайтесь набрать побольше очков.
- Вот это да! - вздохнул Мэтт.
...
Рейтинг: 0 / 0
Сложный SQL-запрос с 4-мя таблицами вывод товаров на сайте
    #38628937
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglir ,



Пришел вторым ;-)
...
Рейтинг: 0 / 0
Сложный SQL-запрос с 4-мя таблицами вывод товаров на сайте
    #38630062
DenielDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cygapb-007,

Так чего парни, не реально что ли написать такой запрос?
...
Рейтинг: 0 / 0
Сложный SQL-запрос с 4-мя таблицами вывод товаров на сайте
    #38630070
SharuPoNemnogu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторвложенный select всегда возвращает один тот же номер реализатора.
ну значит в нем и проблема, если он возвращает 1 номер всего. Тогда там должно быть IN в вложенный возвращаться несколько номеров. Туда и копайте.
...
Рейтинг: 0 / 0
Сложный SQL-запрос с 4-мя таблицами вывод товаров на сайте
    #38630084
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SharuPoNemnoguавторвложенный select всегда возвращает один тот же номер реализатора.
ну значит в нем и проблема, если он возвращает 1 номер всего. Тогда там должно быть IN в вложенный возвращаться несколько номеров. Туда и копайте.

да почти уверены все что запрос написать легко, а вот понять что надо - вот это не реально
...
Рейтинг: 0 / 0
Сложный SQL-запрос с 4-мя таблицами вывод товаров на сайте
    #38630094
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DenielDevCygapb-007,

Так чего парни, не реально что ли написать такой запрос?Честно говоря, лениво... вникать...

Может, на Работа пробануть ?
...
Рейтинг: 0 / 0
Сложный SQL-запрос с 4-мя таблицами вывод товаров на сайте
    #38630165
DenielDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cygapb-007,

Окей, понял, спасибо, попробую туда.
...
Рейтинг: 0 / 0
Сложный SQL-запрос с 4-мя таблицами вывод товаров на сайте
    #38630167
DenielDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SharuPoNemnogu,

Это я пробовал, MySQL дохнет тогда, там логика тогда путается. Его надо переделать.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Сложный SQL-запрос с 4-мя таблицами вывод товаров на сайте
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]