0

私は、OpenCart eCommerce を使用している 1 つの電子ショップで管理者として働いています。最近、バルク製品に特別価格を追加して、数日間稼働させておくように依頼されました。もちろん、管理ページで1つずつ変更できます。問題は、phpMyAdmin を使用して変更する方法です。
(Opencart バージョン 2.1.0.1)

25 ユーロの商品が 46 個あり、20 ユーロに特別価格を追加する必要があります。

価格を更新する必要があるテーブルは

oc_product_special

更新する必要がある列は

oc_product_special.price

もちろん、テーブルから25ユーロかかる製品が必要です

oc_product

このテーブルから製品を取得し、特別価格を 20€ に追加するには</p>

問題は、これら2つのテーブルを接続する方法です。これを達成できるように、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 構文にエラーがあります。oc_product2 行目の 'FROM INNER JOIN oc_product_specialON oc_product.product_id ='付近で使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

どんな助けでも大歓迎です ここに画像の説明を入力

**編集

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 秒かかりました)

***** 2回目の更新

まず走った

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

update ステートメントではなく、insert ステートメントが必要です。これらの製品から既存のスペシャルを事前に削除し、次のようにクエリを実行してそれらをクリアすることも検討してください。

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_id, priority,start_date , andend_date` を調整する必要があります。

于 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 に答える