Объединение более двух таблиц mysql с последующим манипулированием строками в сгруппированные многомерные массивы - PullRequest
0 голосов
/ 13 июля 2010

Я пытаюсь объединить несколько таблиц myqsl и затем обработать полученные массивы с помощью PHP, но у меня возникают проблемы при манипулировании моими данными для получения нужных группировок.

table.users+ ---------------uid
name

table.profile_values+ -----------------------шлагтовUIDcategory_value

table.profile_fields+ ---------------------шлагтовcategory_title

Вот мой sql-запрос:

SELECT users.name, profile_fields.category_title, profile_values.category_value FROM profile_values 
    INNER JOIN profile_fields
        ON profile_values.fid=profile_fields.fid
    INNER JOIN users
        ON users.uid=profile_values.uid
    ORDER BY users.name ASC

Используя I while loop для fetch_array (), как и ожидалось, я получаю массив для каждого номера строки, который выглядит примерно так:

Array (
    [0] => Array (
            [name] => Bob
            [category_title] => Occupation 
            [category_value] => IT
            ) 
    [1] => Array ( 
            [name] => Bob 
            [category_title] => Previous Experience 
            [category_value] => Very little.
            ) 
    ...
)

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

Array( 
    [name] => array(
            [category_title 1] => value 1
            [category_title 2] => value 2
            ...
    )
    ....
)

Я провел большую часть дня, рассматривая различные примеры и не смог найтитот, который помогает мне понять лучшее место для вставки и группировки моих данных.Я видел примеров с использованием GROUP_CONCAT, что похоже на то, что я хочу, но я бы хотел сохранить свои данные в массивах, если это возможно.

Должен ли я использовать вложенные циклы foreach после того, как мои строки назначены для массивов, с использованием GROUP BY в моем выражении sql или с сочетанием обоих?

1 Ответ

2 голосов
/ 13 июля 2010

Используйте php для создания нужного вам массива. Может быть что-то вроде:

$result = mysql_query($sql) or die(mysql_error());
$newArray = array();
while($row = mysql_fetch_assoc($result)){
    $newArray[$row['name']][$row['category_title']][] = $row['category_value'];
}
...