2013-04-04 77 views
3

我在SQL一個完整的新手,所以請溫柔不同領域的價值在一個表上改變字段的值...SQL代碼基於在不同的表

我的產品數據庫。我想根據產品標題中是否存在某個特定字詞,以及僅在產品數量爲零時使用SQL將一批產品移動到其他類別。

該數據庫包括2個相關的表:

  • 第一表是products具有這2個相關列:products_quantitymaster_categories_id

  • 第二表是products_description,它有相應列products_name(標題)

因此,例如,產品wi日以下標題(存儲在列products name):

Archimede Seguso Murano Incalmo Millefiori Glass Bowl 

我想的SQL代碼可找到此產品(包含在標題中註明Archimede任何任何其他人),檢查庫存數量0 ,如果是這樣,請將這些產品的列master_categories_id的值更改爲277

我迄今拿出的代碼是:

UPDATE products 
SET master_categories_id = '277' 
WHERE products_quantity = '0' and products_name = 'Archimede'; 

然而,這不起作用作爲列products_name不在products表。我花了很多時間尋找這樣做的正確方法,沒有運氣,並會永遠感激任何幫助!

我的網站是使用zencart構建的,上述SQL是使用Zen Carts Admin「SQL Query Executor」運行的,但是如果有幫助,我也可以使用phpMyAdmin運行SQL。我正在使用MySQL版本5.

對不起,如果我遺漏了任何明顯需要知道的東西,就像我說的我是一個完全新手,但我會盡力提供您需要的任何其他信息。提前致謝!

+0

應該有一些常見的問題,將一張表中的產品與另一張表關聯起來。沒有這個,你就無法前進。 – harsh 2013-04-04 11:19:42

回答

2

假設你有兩個表,你可以使用它來加入的產品ID列,您需要連接表做UPDATE

UPDATE products p 
INNER JOIN products_description pd 
    on p.product_id = pd.product_id 
SET p.master_categories_id = '277' 
WHERE p.products_quantity = '0' 
    and pd.products_name = 'Archimede'; 

如果要更新包含Archimede任何行,那麼你將不得不使用LIKE運營商在SQL:

UPDATE products p 
INNER JOIN products_description pd 
    on p.product_id = pd.product_id 
SET p.master_categories_id = '277' 
WHERE p.products_quantity = '0' 
    and pd.products_name LIKE '%Archimede%'; 

LIKE操作者會發現,含有Archimede在標題任何行。

+0

絕對在正確的軌道上(必須將「product_id」更改爲「products_id」),但現在很明顯有第三個表也需要更改: 表名:「products_to_categories」。 2個字段:「products_id」和「categories_id」。 該表中的「categories_id」字段也需要更改爲與「master_categories_id」相同的編號(例如277)。對不起,沒有意識到這一點,並非常感謝迄今的幫助! – 2013-04-04 14:46:36

+0

@WayneStephens那麼需要在不同的表中更改類別ID? – Taryn 2013-04-04 14:50:33

+0

是的,第三張名爲「products_to_categories」的表格。我不知道如何連接3個表格(在你的幫助之前,我不知道如何連接2個表格),但現在我已經通過在第一個腳本之後運行以下腳本來解決它: 'UPDATE products_to_categories pc INNER JOIN產品p 上一個pc.products_id = p.products_id SET pc.categories_id ='277' WHERE p.master_categories_id ='277';' – 2013-04-04 15:07:32

相關問題