0

我在一家使用 OpenCart 电子商务的电子商店担任管理员,最近他们要求我为 Bulk 产品添加特价并让它运行几天。当然,我可以在管理页面中一一更改。事情是我如何通过 phpMyAdmin 更改它。
( Opencart 版本 2.1.0.1 )

我有 46 种产品,价格为 25 欧元,我必须将特价添加到 20 欧元。

我们要更新价格的表是

oc_product_special

我们必须更新的专栏是

oc_product_special.price

当然,我们需要从餐桌上花费 25 欧元的产品

oc_product

从该表中检索产品并将特价添加到 20 欧元</p>

问题是如何连接这两个表,这样我就可以添加要运行的 sql 查询的特价,这样我就可以实现这一点。

oc_product & oc_product_special , update this column oc_product_special.price

我尝试运行此 sql 查询,但收到错误

    UPDATE `oc_product_special`.price
    SET `oc_product_special`.price = 16.1290
    FROM `oc_product`
    INNER JOIN `oc_product_special`
          ON `oc_product`.product_id =`oc_product_special`.product_id
    WHERE`oc_product`.price = 20.1612;

**** 价格不含税 25€ / 1,24(税率)= 20.1612€</p>

错误 #1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 2 行的“FROM oc_productINNER JOIN oc_product_specialON oc_product.product_id =”附近使用正确的语法

任何帮助表示赞赏 在此处输入图像描述

**编辑

更新我的 Sql 查询

UPDATE oc_product_special AS ps 
INNER JOIN oc_product op ON ps.product_id = op.product_id 
set ps.price = 16.1290 
where op.price = 20.1612

但问题是 0 行受到影响。(查询耗时 0.0003 秒),如果我使用这些价格运行选择查询,我会得到结果。

select *
from oc_product as op
where op.price=20.1612

显示第 0 - 29 行(共 46 行,查询耗时 0.0010 秒)

*****第二次更新

首先我跑了

DELETE FROM `oc_product_special`
WHERE product_id IN
(
    SELECT product_id
    FROM oc_product p
    WHERE p.price = 20.1612
);

所以我可以“从这些产品中删除任何现有的特价商品”,这个查询运行没有任何问题

之后我尝试运行插入查询

INSERT INTO `oc_product_special` (`product_special_id`, `product_id`, `customer_group_id`, `priority`, `price`, `date_start`,`date_end`)
VALUES
(
    SELECT NULL, 78, 1, 0, 16.1290, 0000-00-00, 0000-00-00
    FROM oc_product p
    WHERE p.price = 20.1612
);

我根据我的表格数据调整了我的数据。但我收到此错误

#1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 4 行的 'SELECT NULL, 78, 1, 0, 16.1290, 0000-00-00, 0000-00-00 FROM oc_product p ' 附近使用正确的语法

4

2 回答 2

0

您需要插入语句而不是更新。您也可以考虑事先从这些产品中删除任何现有的特价商品并运行查询以清除它们,如下所示:

DELETE FROM `oc_product_special`
WHERE product_id IN
(
    SELECT product_id
    FROM oc_product p
    WHERE p.price = 20.1612
);

然后您可以选择所需的产品 ID 以及其他字段并像这样插入它们:

INSERT INTO `oc_product_special` (`product_special_id`, `product_id`, `customer_group_id`, `priority`, `price`, `date_start`, `date_end`)
VALUES
(
    SELECT NULL, product_id, 1, 0, 16.1290, CURDATE(), CURDATE() + INTERVAL 1 DAY
    FROM oc_product p
    WHERE p.price = 20.1612
);

在此示例中,特价从今天开始并持续 5 天。当然,您应该在我的查询中调整customer_group_idstart_date priority,end_date , and

于 2016-08-28T22:15:49.530 回答
0

您的查询没有格式,不符合 MySQL 标准,您必须注意以下几点:

  • UPDATE声明之后,应指定要使用的表而不是列
  • SET声明仅在INNER JOIN
  • 连接表时使用后缀方便

下面更正 MySQL 查询(更改价格):

UPDATE oc_product_special AS ps 
INNER JOIN oc_product op ON ps.product_id = op.product_id 
set ps.price = 22 where op.price = 0.00
于 2016-08-25T13:51:40.357 回答