2017-09-03 1 views
0

Ich habe einen E-Shop. Es gibt viele Tische, aber nur zwei. Produkte und Varianten. Jedes Produkt hat mehrere Varianten. Ex. Produkt: id | Name | URL | aktivMySQL wählen, wo zwei Felder nicht in Array gleichzeitig sind

  • 1337 | prod1 | prod-1 | 1

Und Varianten: prod_id | Farbe | Größe | Preis

  • 1337 | xl | schwarz | 10
  • 1337 | sm | schwarz | 11
  • 1337 | xl | weiß | 9
  • 1337 | sm | weiß | 8

usw.

Und ich habe eine große xml von Waren zu importieren. Ich parse es in Array und importiere Produkte und Varianten, die fehlen. Hier ist alles in Ordnung. Was ich tun muss - ist, Optionen zu entfernen, die in eingehenden Array fehlen. Ich kann es Schritt für Schritt tun, aber Array von Daten ist so riesig, dass Server-Speicher nicht ausreicht. Also muss ich eine SQL-Anfrage machen, die die fehlenden Varianten im eingehenden Array aufgreift.

kann ich eingehenden Array mache in irgendeiner Weise, zum Beispiel:

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" 
     } 
... 
} 

Jetzt ist die Frage ist - wie Abfrage, um alle Varianten zu wählen, die nicht in dieser Reihe sind. Summierung Array von Größen und Farben und sagen, dass es Zeilen auswählen nicht im Array funktioniert nicht, weil fehlende Option könnte zum Beispiel "Black-Xl", aber es ist "Black-Sm" und "White-Xl", also schwarz und xl sind in diesem Array.

Hoffnung i klare Beschreibung gemacht;)

Antwort

0

Eigentlich kann man laufen NICHT IN/IN mysql Zustand.

Sie können alle verfügbaren Varianten aus Array sammeln und löschen mit Paar nicht in Bedingung ausführen.

Lassen Sie uns sagen, wir haben schwarz-XL-Weiß-sm-Varianten, so wird Abfrage sein:

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

Beispiel an der Geige mit select (zu wissen, was gelöscht los werden): http://sqlfiddle.com/#!9/d6623c/5

+0

Lief wie am Schnürchen. Danke mein Herr! – ikebastuz