2011-11-23 69 views
1

我們目前的mysql腳本將我們的進銷存軟件連接到我們的網站更新庫存水平,而不是什麼,但是我們的產品表中有一個字段,指示產品是否可見,哪些腳本沒有處理。我想介紹一些IF邏輯來設置prodvisible列爲1,如果它的更新庫存水平是> 0.MySQL中的基本邏輯

在我的研究中,IF似乎不能用功能出現,可悲的是我沒有經驗儘管我盡了最大努力,但卻無法實現。

當前腳本我們有工作成功地更新庫存水平是如下...

update isc_products p 
set 
p.prodcurrentinv =[{Level_LessOrderBook}] 
where p.prodcode = '[{ItemNumber}]' and p.prodinvtrack=1 
--GO;-- 
update isc_product_variation_combinations pvc 
set 
pvc.vcstock = [{Level_LessOrderBook}] 
where pvc.vcsku='[{ItemNumber}]' 

我想要的東西整合成第一部分,做類似以下

If [{Level_LessOrderBook}] > 0 
p.prodvisible = 1 where p.prodcode = '[{ItemNumber}]' 
ENDIF 

如果產品缺貨,我不希望它將產品設置爲不可見,只有存貨時纔可見。

感謝您的任何幫助。

+0

在別處解決了這個問題。這是解決辦法。 更新 isc_products p 設置 p.prodcurrentinv = [{Level_LessOrderBook}] p.prodvisible = CASE WHEN [{Level_LessOrderBook}]> 0 THEN 1 ELSE 0 END 其中 p.prodcode =「[{ ItemNumber}]」 和p.prodinvtrack = 1 --GO; - 更新 isc_product_variation_combinations PVC 設置 pvc.vcstock = [{Level_LessOrderBook}] 其中 pvc.vcsku = '[{ItemNumber}]' –

回答

1

你應該能夠做到這一點沒有一個IF語句:

update isc_products p 
set p.prodvisible = 1 
where p.prodcode = '[{ItemNumber}]' 
and [{Level_LessOrderBook}] > 0 

或者,如果你問這樣做在一個聲明:

update isc_products p 
set 
p.prodcurrentinv = [{Level_LessOrderBook}], 
p.prodvisible = IF([{Level_LessOrderBook}] > 0, 1, p.prodvisible) 
where p.prodcode = '[{ItemNumber}]' and p.prodinvtrack=1 

最後,這個怎麼樣?

update 
    isc_products p 
set 
    p.prodcurrentinv = [{Level_LessOrderBook}], 
    p.prodvisible = case when [{Level_LessOrderBook}] > 0 then 1 else p.prodvisible end 
where 
    p.prodcode = '[{ItemNumber}]' 
    and p.prodinvtrack = 1 
--GO;-- 
update 
    isc_product_variation_combinations pvc 
set 
    pvc.vcstock = [{Level_LessOrderBook}] 
where 
    pvc.vcsku='[{ItemNumber}]' 

我以與現有腳本的其餘部分完全相同的方式格式化所有內容。您確定列prodvisible存在,是拼寫正確,並採取數字或位值?

+0

我試了兩次,但沒有運氣。由於它是發送該語句的發票程序,因此我看不到任何可能產生的錯誤消息。將第一個附加到我已發佈的內容後面的正確方法是什麼? –

+0

@RichardDownes我爲你增加了另一個例子 - 這有幫助嗎? –

+0

新代碼正確更新庫存水平,但它並沒有更新prodvisible到1我害怕:(可能是在輸出代碼的每個部分的結果時處理?即第三部分將採用考慮到第一部分所做的更改? –