【问题标题】:MySQL select where two fields are not in array at the same timeMySQL选择两个字段不在数组中的位置
【发布时间】:2018-02-11 18:43:29
【问题描述】:

我有一个电子商店。有很多桌子,但只需要两张。产品和变体。每个产品都有多个变体。前任。 产品: 编号 |姓名 |网址 |活跃

  • 1337 |产品1 |产品-1 | 1

还有变体: prod_id |颜色 |尺寸 |价格

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

等等

我有大量的商品要导入。我将其解析为数组并导入缺少的产品和变体。这里一切都很好。 我必须做的是删除传入数组中缺少的选项。 我可以一步一步做,但是数据数组太大了,服务器内存不够用。所以我必须发出一个 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"
      }
...
}

现在的问题是 - 如何进行查询以选择不在此数组中的所有变体。制作大小和颜色的总和数组并告诉它选择不在数组中的行不起作用,因为缺少的选项可能是例如“black-xl”,但是有“black-sm”和“white-xl”,所以黑色和xl 在那个数组中。

希望我描述清楚;)

【问题讨论】:

    标签: php mysql arrays select


    【解决方案1】:

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

    您可以从数组中收集所有可用的变体,然后在没有配对的情况下运行删除。

    假设我们有 black-xl 和 white-sm 变体,所以查询将是:

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

    使用 select 的例子(知道什么会被删除):http://sqlfiddle.com/#!9/d6623c/5

    【讨论】:

    • 工作就像一个魅力。谢谢你,先生!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-24
    • 2010-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多