mysql - как сделать SUM () для определенных данных в зависимости от 3 таблиц - PullRequest
0 голосов
/ 15 января 2019

Товар имеет разные параметры (атрибуты), в зависимости от возможных вариантов вы получаете комбинации продуктов. Я хочу изменить цену каждого сочетания для моих продуктов. для каждой комбинации цена должна быть равна сумме всех атрибутов этой комбинации. примечание: один и тот же атрибут может оказывать два разных влияния на цену в зависимости от продукта.

У меня есть 3 таблицы следующим образом:

ps_product_attribute_shop - список атрибутов, влияющих на цену в зависимости от комбинации (id_product_attribute).

+----------------------+--------+------------+
| id_product_attribute | price  | id_product |
+----------------------+--------+------------+
| 27934                | 50.000 | 9779       |
+----------------------+--------+------------+
| 27935                | 24.000 | 9780       |
+----------------------+--------+------------+

ps_attribute_impact - список каждого атрибута и продукта, к которому они относятся, и их влияние на цену

+------------+--------------+--------+
| id_product | id_attribute | price  |
+------------+--------------+--------+
| 9778       | 45           | 10.000 |
+------------+--------------+--------+
| 9779       | 46           | 00.000 |
+------------+--------------+--------+
| 9779       | 47           | 00.000 |
+------------+--------------+--------+
| 9779       | 55           | 00.000 |
+------------+--------------+--------+
| 9779       | 56           | 46.000 |
+------------+--------------+--------+
| 9779       | 57           | 67.000 |
+------------+--------------+--------+

ps_product_attribute_combination - сопоставление атрибутов и комбинаций продуктов (здесь комбинация 27934 имеет два атрибута => 46, 56)

+--------------+----------------------+
| id_attribute | id_product_attribute |
+--------------+----------------------+
| 46           | 27934                |
+--------------+----------------------+
| 56           | 27934                |
+--------------+----------------------+
| 46           | 27935                |
+--------------+----------------------+
| 57           | 27935                |
+--------------+----------------------+

Я пытаюсь обновить все цены с ps_product_attribute_shop для каждой комбинации продуктов.

Я пытаюсь использовать следующий запрос в phMyAdmin:

UPDATE ps_product_attribute_shop
SET ps_product_attribute_shop.price = 
(
   SELECT SUM(ps_attribute_impact.price) 
   FROM ps_attribute_impact 
   WHERE ps_product_attribute_shop.id_product = ps_attribute_impact.id_product 
         AND ps_attribute_impact.id_attribute IN 
         (
            SELECT ps_product_attribute_combination.id_attribute 
            FROM ps_product_attribute_combination 
            WHERE ps_product_attribute_combination.id_product_attribute = 
                  ps_product_attribute_shop.id_product_attribute
         )
);

но я получил следующую ошибку в phpMyAdmin:

# 1064 - у вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MariaDB, чтобы узнать правильный синтаксис для использования рядом с ')' в строке 1

1 Ответ

0 голосов
/ 15 января 2019

На самом деле работает следующий запрос.

UPDATE ps_product_attribute_shop
SET ps_product_attribute_shop.price = 
(
   SELECT SUM(ps_attribute_impact.price) 
   FROM ps_attribute_impact 
   WHERE ps_product_attribute_shop.id_product = ps_attribute_impact.id_product 
         AND ps_attribute_impact.id_attribute IN 
         (
            SELECT ps_product_attribute_combination.id_attribute 
            FROM ps_product_attribute_combination 
            WHERE ps_product_attribute_combination.id_product_attribute = 
                  ps_product_attribute_shop.id_product_attribute
         )
);

Проблема заключалась в том, что я нажал кнопку «Симулировать запрос» в phpMyAdmin. Но когда я нажал кнопку «Выполнить», все заработало правильно.

Спасибо всем за помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...