加入两个以上的mysql表,然后将行操作为分组的多维数组

时间:2010-07-13 15:41:19

标签: php mysql arrays foreach multidimensional-array

我正在尝试连接多个myqsl表,然后使用PHP处理结果数组,但是我在操作数据时遇到问题以获得我想要的分组。

  

table.users
  + ---------------
uid
名称

     

table.profile_values
  + -----------------------
fid
uid
category_value

     

table.profile_fields
  + ---------------------
fid
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循环遍历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
            ...
    )
    ....
)

我花了大量时间查看各种示例,但却找不到能帮助我理解插入和分组数据的最佳位置的示例。我见过examples使用GROUP_CONCAT,这与我想要的类似,但我想尽可能将数据保存在数组中。

在将行分配给数组,在sql语句中使用GROUP BY或两者的组合后,我是否应该使用嵌套的foreach循环?

1 个答案:

答案 0 :(得分:2)

使用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'];
}