php + sql分层数组结果

时间:2013-05-24 07:05:25

标签: php sql

我正在使用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

我担心它没什么特别的。

3 个答案:

答案 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