2016-08-23 56 views
0

我在一家使用OpenCart電子商務的電子商店中擔任管理員職務,最近他們要求我向散裝產品添加特價,並讓其運行數天。當然,我可以在管理頁面中逐一更改它。事情是我可以通過phpMyAdmin改變它。
(Opencart版本2.1.0.1)Opencart - phpMyAdmin批量更新特價

我有46件產品,其價格爲25歐元,我必須將特價加到20歐元。

表,我們必須更新價格

oc_product_special 

和專欄中,我們必須更新是

oc_product_special.price 

當然,我們需要的產品,花費25€從表

oc_product 

從該表中檢索產品並添加特價至20€

事情是如何連接這兩個表,所以我可以添加特殊的價格,哪些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€

錯誤 #1064 - 您的SQL語法錯誤;檢查對應於你的MySQL服務器版本使用附近的正確語法手冊 'FROM oc_product INNER JOIN oc_product_special ON oc_product .product_id =' 第2行

任何幫助表示讚賞 enter image description here

** 編輯

更新我的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'附近使用正確的語法。

+0

閱讀本文可能有所幫助:http://dev.mysql.com/doc/refman/5.7/en/update.html – billynoah

+0

@billynoah已編輯,現在有正確的語法,但我沒有收到任何結果 –

+0

我看到你已經接受了一個答案 - 這是否意味着你的問題解決了? – billynoah

回答

0

你的查詢有沒有格式,不符合MySQL的標準,你必須要注意以下幾點:

  • UPDATE聲明後應該指定要使用的表,而不是列
  • SET聲明僅適用於INNER JOIN
  • 使用後綴連接表

下面正確的MySQL查詢時,ES爲方便(改價格):

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 
+0

謝謝你的回答,我需要更多的幫助來解決這個問題。 –

+0

什麼更幫你需要? @AgathonMarinopoulos – Sphinx

+0

嗨獅身人面像,你可以看到我編輯我的問題後,您的查詢,但不幸的是我沒有預期的結果。 –

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_id,priority, start_date , and end_date`。

+0

感謝您的答案,我更新了我的問題,因爲我仍然收到錯誤,試圖在特定產品中添加特殊價格。 –

+0

您運行的查詢與我提供的查詢不同。 – billynoah