2011-01-11 3 views
0

Ich schreibe eine Integration zwischen Drupal/Ubercart und einem In-House-Admin-System.Extrahieren Sie Drupal-codierte Daten mit MySQL aus der Ubercart-Tabelle

Der Kunde verwendet Ubercart-Produkte mit Attributen (z. B. eine Plakette, die einen Namen, eine Firma, ein Registrierungsdatum und einen Monat enthalten kann). Wenn ein Auftrag erteilt wird, werden die für die Attribute eingegebenen Werte in uc_order_products geschrieben, wobei das Feld data die tatsächlichen Werte enthält, die vom Benutzer eingegeben wurden. Soweit ich das beurteilen kann, ist dies der einzige Ort, an dem Produktattributwerte, wie sie von einem Endbenutzer eingegeben werden, gespeichert werden.

Die codierten Attributwerte verwendet ein Format, alle über Drupal Tabellen gesehen Objekte zu kodieren:

a:3:{s:10:"attributes";a:4:{s:26:"Name (to appear on plaque)";a:1:{i:0;s:10:"Some 
Namee";}s:7:"Company";a:1:{i:0;s:28:"Some Company Name Goes here_";}s:19:"Certification 
Month";a:1:{i:0;s:0:"";}s:18:"Certification Year";a:1: 
{i:0;s:4:"2011";}}s:9:"shippable";s:1:"1";s:6:"module";s:10:"uc_product";} 

und erweitert, es sieht wie folgt aus:

a:3: 
{ 
    s:10:"attributes"; 
    a:4: 
     { 
      s:26:"Name (to appear on plaque)"; 
      a:1: 
       { 
        i:0; 
        s:10:"Some Namee"; 
       } 
      s:7:"Company"; 
      a:1: 
       { 
        i:0; 
        s:28:"Some Company Name Goes Herep"; 
       } 
      s:19:"Certification Month"; 
      a:1: 
       { 
        i:0; 
        s:0:""; 
       } 
      s:18:"Certification Year"; 
      a:1: 
       { 
        i:0; 
        s:4:"2011"; 
       } 
     } 
    s:9:"shippable"; 
    s:1:"1"; 
    s:6:"module"; 
    s:10:"uc_product"; 
} 

ich eine einfache Art und Weise zu bekommen dort die einzelnen Feldwerte in diesem Text mit SQL? Ich kann eine SQL-Funktion schreiben, um nach Besonderheiten zu suchen, aber ich würde gerne wissen, ob jemand einen existierenden MySQL-Ansatz (vielleicht innerhalb von Drupal) kennt, der dies tun würde.

Danke!

Antwort

0

Ich weiß nicht, ob eine integrierte Lösung existiert, aber ich schrieb eine SQL-Funktion, die als Parameter Text wie Name (to appear on plaque) übernimmt. Die Funktion lokalisiert dann den Text und extrahiert den nachfolgenden { ... } Block und ruft daraus den entsprechenden Zeichenfolgenwert ab. Grob, aber funktioniert in diesem Fall.

Wenn jemand eine bessere Lösung hat, würde ich gerne davon hören!