我正在尝试连接多个myqsl表,然后使用PHP处理结果数组,但是我在操作数据时遇到问题以获得我想要的分组。
table.users
+ ---------------
uid
名称table.profile_values
+ -----------------------
fid
uid
category_valuetable.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循环?
答案 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'];
}