|
|
|
Сложный SQL-запрос с 4-мя таблицами вывод товаров на сайте
|
|||
|---|---|---|---|
|
#18+
Добрый день! Готов заплатить денежку, кто поможет написать. Очень нужно, не могу справиться. Дамп в прикреплении. Спасибо! Задача: Создать 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 13:09:19 |
|
||
|
Сложный SQL-запрос с 4-мя таблицами вывод товаров на сайте
|
|||
|---|---|---|---|
|
#18+
DenielDevПричем, есть поставщик/владелец сайта (определяется по поле my = 1 (Realizers), его товары при выводе в приоритете (то есть, если даже у поставщиков есть такой же товар (он группируется по barcode, и oem, причем что-то из этого может не совпадать, склеивать, если хоть одно совпало), если для данной категории, есть также товары других поставщиков то должны вывестись также и они, но если у поставщиков есть один и тот же товар, то должен вывестить только товар того поставщика, у которого приоритет выше (есть столбец в Realizers «Priority” - 1,2,3 (приоритет поставщика), если поставщики находятся на одном уровне, то надо вывести того, у которого цена ниже.автор Мэтт отыскал окошечко с надписью "РЕЗУЛЬТАТ" над ним: там горела цифра "37". "Ну что ж, - подумал он, - будем стремиться к этому результату." Мэтт решил пока не снимать цифры с экрана - сначала нужно прочитать инструкцию. "После начала теста, - читал он, - единица будет прибавляться к вашему результату всякий раз, когда вы нажимаете на левую кнопку, если только это не противоречит условиям, указанным ниже. Нажимайте на левую кнопку, как только загорается красная лампочка, если только одновременно не горит зеленая, за исключением того случая, когда не следует нажимать ни на одну из кнопок, потому что открыта правая дверца, если только не выключены обе лампочки. Если открыта правая дверца, а левая закрыта, нажимать на любую из кнопок не надо, потому что это не отразится на результате, однако на левую кнопку, тем не менее, нужно нажимать при подобных обстоятельствах, если все остальные условия позволяют нажимать на кнопку перед тем, как будет зафиксирован результат в последующих фазах теста. Для того чтобы выключить зеленую лампочку, нажмите на правую кнопку. Если левая дверца не закрыта, не следует нажимать на кнопки. Если левая дверца закрыта, пока горит красная лампочка, не нажимайте на левую кнопку, если выключена зеленая лампочка, если только не открыта правая дверца. Для начала теста передвиньте рычаг из нейтрального положения в крайнее правое. Тест продолжается в течение двух минут с того момента, как рычаг будет передвинут вправо. Внимательно прочитайте эту инструкцию - можете потратить на подготовку столько времени, сколько считаете необходимым, - и лишь после этого приступайте к тесту. Вам запрещено задавать вопросы экзаменатору, поэтому постарайтесь изучить инструкцию как можно тщательнее. Постарайтесь набрать побольше очков. - Вот это да! - вздохнул Мэтт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 13:29:09 |
|
||
|
Сложный SQL-запрос с 4-мя таблицами вывод товаров на сайте
|
|||
|---|---|---|---|
|
#18+
tanglir , Пришел вторым ;-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 14:30:34 |
|
||
|
Сложный SQL-запрос с 4-мя таблицами вывод товаров на сайте
|
|||
|---|---|---|---|
|
#18+
Cygapb-007, Так чего парни, не реально что ли написать такой запрос? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2014, 13:20:05 |
|
||
|
Сложный SQL-запрос с 4-мя таблицами вывод товаров на сайте
|
|||
|---|---|---|---|
|
#18+
авторвложенный select всегда возвращает один тот же номер реализатора. ну значит в нем и проблема, если он возвращает 1 номер всего. Тогда там должно быть IN в вложенный возвращаться несколько номеров. Туда и копайте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2014, 13:24:56 |
|
||
|
Сложный SQL-запрос с 4-мя таблицами вывод товаров на сайте
|
|||
|---|---|---|---|
|
#18+
SharuPoNemnoguавторвложенный select всегда возвращает один тот же номер реализатора. ну значит в нем и проблема, если он возвращает 1 номер всего. Тогда там должно быть IN в вложенный возвращаться несколько номеров. Туда и копайте. да почти уверены все что запрос написать легко, а вот понять что надо - вот это не реально ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2014, 13:33:28 |
|
||
|
Сложный SQL-запрос с 4-мя таблицами вывод товаров на сайте
|
|||
|---|---|---|---|
|
#18+
DenielDevCygapb-007, Так чего парни, не реально что ли написать такой запрос?Честно говоря, лениво... вникать... Может, на Работа пробануть ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2014, 13:42:31 |
|
||
|
Сложный SQL-запрос с 4-мя таблицами вывод товаров на сайте
|
|||
|---|---|---|---|
|
#18+
Cygapb-007, Окей, понял, спасибо, попробую туда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2014, 14:27:19 |
|
||
|
|

start [/forum/topic.php?fid=47&fpage=180&tid=1834910]: |
0ms |
get settings: |
7ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
54ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
73ms |
get tp. blocked users: |
2ms |
| others: | 254ms |
| total: | 424ms |

| 0 / 0 |
