Извлечение данных в Drupal с использованием MySQL из таблицы Ubercart - PullRequest
0 голосов
/ 11 января 2011

Я пишу часть интеграции между Drupal / Ubercart и внутренней системой администратора.

Клиент использует продукты Ubercart с атрибутами (например, табличка, которая может содержать название, компанию, дату регистрации и месяц). При размещении заказа значения, введенные для атрибутов, записываются в uc_order_products, где поле data содержит фактические значения, введенные пользователем. Насколько я могу судить, это единственное место, где хранятся значения атрибутов продукта, введенные конечным пользователем для размещения заказа.

В кодированных значениях атрибутов для кодирования объектов используется формат, видимый во всех таблицах Drupal:

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

А в расширенном виде это выглядит так:

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

Есть ли простой способ получить значения отдельных полей в этом тексте с помощью SQL? Я могу написать функцию SQL, чтобы искать специфические особенности, но я хотел бы знать, знает ли кто-нибудь о существующем подходе MySQL (возможно, в Drupal), который сделал бы это.

Спасибо!

Ответы [ 2 ]

2 голосов
/ 12 января 2011

Это сериализованный массив, то есть данные, которые были обработаны PHP-функцией serialize () , прежде чем Drupal вставил их в базу данных. Используйте противоположную функцию unserialize () , чтобы превратить эту строку обратно в массив.

0 голосов
/ 18 января 2011

Не знаю, существует ли какое-либо встроенное решение, но в итоге я написал функцию SQL, которая принимает в качестве параметра текст, такой как Name (to appear on plaque).Затем функция находит текст и извлекает последующий блок { ... } и извлекает соответствующее строковое значение.Грубо, но работает в этом случае.

Если у кого-то есть лучшее решение, я хотел бы услышать об этом!

...