MySQL选择两个字段不在同一个数组中的位置

时间:2017-09-03 08:30:41

标签: php mysql arrays select

我有一个电子商店。有很多表,但只需要两个。产品和变体。每种产品都有多种变体。防爆。 产品: id |名字|网址|活性

  • 1337 | prod1 | prod-1 | 1

和变种: 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数组中的行不起作用,因为缺少选项可能是例如" black-xl",但是有" black-sm"和" white-xl",所以黑色和xl在那个数组中。

希望我明确说明;)

1 个答案:

答案 0 :(得分:0)

实际上你可以运行NOT IN / IN mysql条件。

您可以从数组中收集所有可用的变体,并使用不符合条件的对运行删除。

我们说我们有black-xl和white-sm变种,所以查询将是:

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

选择小提琴的例子(知道要删除的内容):http://sqlfiddle.com/#!9/d6623c/5