2012-09-14 4 views
4

Глядя на этот массив, можно увидеть, что только значение foo6 отличается от каждого родительского ключа:внутреннего соединения массива приводит

Array 
(
    [0] => Array 
     (
      [foo1] => Apple 
      [foo2] => Banana 
      [foo3] => Carrots 
      [foo4] => Deer 
      [foo5] => Feather 
      [foo6] => Grapes 
     ) 
    [1] => Array 
     (
      [foo1] => Apple 
      [foo2] => Banana 
      [foo3] => Carrots 
      [foo4] => Deer 
      [foo5] => Feather 
      [foo6] => Heater 
     ) 
    [2] => Array 
     (
      [foo1] => Apple 
      [foo2] => Banana 
      [foo3] => Carrots 
      [foo4] => Deer 
      [foo5] => Feather 
      [foo6] => Quail Eggs 
     ) 
) 

запрос:

SELECT 
    tpp.page_master_properties_style AS foo1, 
    tpp.page_master_properties_bg AS foo2, 
    tpp.page_master_properties_data AS foo3, 
    tpp.page_properties_style AS foo4, 
    tpp.page_properties_bg AS foo5, 
    tpp.page_properties_data AS foo6, 
    tobj.objects_script AS foo6 
FROM templates t 
    INNER JOIN category tc 
    ON t.category_id = tc.category_id 
    INNER JOIN page_properties tpp 
    ON t.templates_id = tpp.templates_id 
    INNER JOIN objects tobj 
    ON t.templates_id = tobj.templates_id 
WHERE 
    t.templates_id = ? 

где ? = 1

Этот вероятно, потому, что в таблице объектов есть несколько записей для templates_id:

+--------------+----------------+-----------------+ 
| objects_id | templates_id | objects_script | 
+--------------+----------------+-----------------+ 
|  1  |  1  |  Grapes  | 
|  2  |  1  |  Heater  | 
|  3  |  1  |  Quail Eggs | 
|  4  |  2  |  Milk  | 
|  5  |  3  |  Lemon  | 
+--------------+----------------+-----------------+ 

мне интересно, есть ли встроенные функции MySql, которая может объединить foo6 в единственный массив, например, для достижения результата, как это:

Array 
(
    [foo1] => Apple 
    [foo2] => Banana 
    [foo3] => Carrots 
    [foo4] => Deer 
    [foo5] => Feather 
    [foo6] => Array 
      (
       [0] => Grapes 
       [1] => Heater 
       [2] => Quail Eggs 
      ) 
) 

ответ

4

Это похоже на работу для group_concat в MySQL арсенал:

SELECT 
    tpp.page_master_properties_style AS foo1, 
    tpp.page_master_properties_bg AS foo2, 
    tpp.page_master_properties_data AS foo3, 
    tpp.page_properties_style AS foo4, 
    tpp.page_properties_bg AS foo5, 
    group_concat(tpp.page_properties_data) AS foo6, 
    tobj.objects_script AS foo6 
FROM templates t 
    INNER JOIN category tc 
    ON t.category_id = tc.category_id 
    INNER JOIN page_properties tpp 
    ON t.templates_id = tpp.templates_id 
    INNER JOIN objects tobj 
    ON t.templates_id = tobj.templates_id 
WHERE 
    t.templates_id = ? 
GROUP BY 
    tpp.page_master_properties_style AS foo1, 
    tpp.page_master_properties_bg AS foo2, 
    tpp.page_master_properties_data AS foo3, 
    tpp.page_properties_style AS foo4, 
    tpp.page_properties_bg AS foo5 

Это будет сгруппировать все строки в tpp.page_properties_data вместе в единственной строке данных и разделить их запятыми, - которые затем можно легко explode в массив при прохождении через набор данных.

+0

Спасибо! Но это сбивает с толку, должен ли я создать новый столбец для 'page_properties_data'? –

+0

@LeandroGarcia Нет, совсем нет. Запустите запрос и в PHP взорвите этот единственный столбец в собственный массив (как элемент большего массива для каждой строки) – Fluffeh

Смежные вопросы