2017-09-03 89 views
0

我有一個電子商店。有很多桌子,但只有兩個需要。產品和變種。每種產品都有多種變體。防爆。產品: 名稱| url |積極MySQL的選擇,其中兩個字段不在陣列同時

  • 1337 | prod1 | prod-1 | 1

And variants: prod_id |顏色|大小|價格

  • 1337 | xl |黑色| 10
  • 1337 | sm |黑色| 11
  • 1337 | xl |白色| 9
  • 1337 | sm |白色| 8

,我有貨的一個巨大的XML導入。我將它解析爲數組並導入缺少的產品和變體。這裏一切都很好。 我必須做的是刪除選項,這些選項在傳入數組中不存在。 我可以一步一步做到,但是數據數組非常巨大,服務器內存不夠。所以我不得不提出一個SQL請求,這個請求會挑選傳入數組中缺少的變體。

我可以進入陣列中的任何方式,例如:

array(2716) { 
    ["00000614552"]=> 
    array(1) { 
    ["options"]=> 
    array(44) { 
     [0]=> 
     array(2) { 
     [0]=> 
     string(11) "white" 
     [1]=> 
     string(3) "2/S" 
     } 
     [1]=> 
     array(2) { 
     [0]=> 
     string(11) "white" 
     [1]=> 
     string(3) "3/M" 
     } 
     [2]=> 
     array(2) { 
     [0]=> 
     string(11) "white" 
     [1]=> 
     string(3) "4/L" 
     } 
     [3]=> 
     array(2) { 
     [0]=> 
     string(11) "white" 
     [1]=> 
     string(4) "5/XL" 
     } 
     [4]=> 
     array(2) { 
     [0]=> 
     string(13) "black" 
     [1]=> 
     string(3) "2/S" 
     } 
... 
} 

現在是問題是 - 如何讓查詢來選擇所有變體,不屬於此陣英寸製作尺寸和顏色的總和陣列,並告訴它來選擇行NOT IN陣列無法工作,因爲缺少選項可能是例如「黑-XL」,但有「黑SM」和「白-XL」,所以黑xl在那個數組中。

希望我明確說明;)

回答

0

其實你可以運行NOT IN/MySQL中的狀態。

您可以從陣列收集所有可用的變種並運行對沒有條件刪除。

比方說,我們有黑色XL白色平方米的變種,所以查詢將是:與小提琴

delete from variants where (color, size) not in (('black', 'xl'), ('white', 'sm'));

例如選擇(要知道什麼會被刪除):http://sqlfiddle.com/#!9/d6623c/5

+0

像魅力一樣工作。謝謝你,先生! – ikebastuz

相關問題