2017-10-17 110 views
-1

我不能比較這陣mysql數據庫值進行比較數組值與PDO

$products = []; 
foreach (array_keys($match[2]) as $idx) 
{ 
    $tagliaprodotto = rtrim(substr($match[2][$idx],1)); 
    $tagliaquantita = ltrim($match[3][$idx],'0'); 
    $products[] = [ 
     'product' => $tagliaprodotto, 
     'quantity' => $tagliaquantita, 
     'terminal' => $match[4][$idx] 
        ]; 
} 

與數據庫內的值的值!我應該這樣做嗎?

我想比較,我有在數據庫內的元素與數組的值,使一些if爲:

- 如果產品不存在於數據庫中:

INSERT INTO table (product, quantity, terminal, date) VALUES (:product, :quantity, :terminal, NOW())

- 如果數據庫記錄完美匹配:產品,數量和終端:Do nothing

- 如果數據庫記錄包含:相同產品但數量不同和/ o [R終端:

UPDATE table SET quantity=:quantity, terminal=:terminal

+0

https://stackoverflow.com/questions/23305300/check-if-username-exists-pdo –

+0

我沒有單個變量$ user ='userName'; – Squalo

+0

這是演示例子,所以你可以更新你的代碼,就像它 –

回答

1

我假設你指數product,否則這得到棘手。使用的ON DUPLICATE KEYIF()組合:

INSERT INTO table (product, quantity, terminal, date) 
    VALUES (:product, :quantity, :terminal, NOW()) 
ON DUPLICATE KEY UPDATE 
    quantity = IF(quantity != :quantity AND terminal = :terminal, :quantity, quantity), 
    terminal = IF(quantity = :quantity AND terminal != :terminal, :terminal, terminal) 

如果有不product指數(或任何指定的列),該UPDATE將永遠不會觸發。如果查詢中存在多個列的索引,則會出現您不打算更新的行得到更新的問題,尤其是在索引不唯一的情況下。

+0

謝謝,但我需要更新日期,但只有當數量或終端更改或產品不存在時 - – Squalo

+0

這是一個相對容易的除了查詢您應該能夠添加的更新部分。它仍然會使用'IF()',並且看起來與數量和終端設置類似,但稍長一些。給它一個鏡頭,如果你仍然需要幫助,我會帶你通過它。 – Spencer

+0

一個答案:1如果數量不同,終端不同它不起作用它是正確的? – Squalo

相關問題