我正在使用php + sql。现在我有一张这样的桌子:
user_id word
-------------
u1 w1
u1 w2
u2 w1
u2 w3
我想查询数据库以查找按用户分组的数据。 期望的结果应该是分层数组,如
array("u1"=>array("0"=>"w1', "1"=>"w2"), "u2"=>array("0"=>"w1", "1"=>"w3"))
我该怎么做?
我只写了一些普通的sql,比如
select * from DB order by user
我担心它没什么特别的。
答案 0 :(得分:1)
是的,你可以做到,我没有检查,但请尝试,
$query = mysql_query("SELECT * FROM tableName WHERE 1 GROUP BY user_id");
While($data = mysql_fetch_object($query)){
$get_data[] = $data ;
}
if($get_data){
foreach($get_data as $val){
$query = mysql_query("SELECT * FROM tableName WHERE user_id = '".$val['user_id']."'");
while($data_new = mysql_fetch_assoc($query)){
$val['user_id'];
$res[] = $data_new ;
}
$userID = $val['user_id'] ;
$array[][$userID] = $res ;
}
}
print_r($array);
答案 1 :(得分:1)
这是一个基本示例,但您必须使用PDO而不是mysql _ *
尝试以下一项。它将解决您的问题
$query = "SELECT * FROM tblwords";
$result = mysql_query($query);
while($row = mysql_fetch_assoc($result))
{
$userId = $row['user_id'];
$arr[$userId][] = $row['word'];
}
echo "<pre>";print_r($arr);
输出
Array
(
[u1] => Array
(
[0] => w1
[1] => w2
)
[u2] => Array
(
[0] => w1
[1] => w3
)
)
答案 2 :(得分:0)
我不确定,但我知道你不能。
但你可以得到这样的结果;
SELECT user_id
, GROUP_CONCAT(DISTINCT word
ORDER BY wordDESC SEPARATOR ',') as words
FROM table_name
GROUP BY user_id
结果;
user_id | words
u1 | w1,w2
u2 | w1,w3