2017-09-03 82 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

相关问题