0

我有一个如下表结构

+--------+---------+
| cat_id | user_id |
+--------+---------+
|     10 |       1 |
|     10 |       2 |
|     11 |       3 |
|     11 |       4 |
+--------+---------+

我试图得到如下结果

Array
(
    [cat_id] => 10,
    Array
    (
        [user_id] => 1,
        [user_id] => 2
    )
)

Array
(
    [cat_id] => 11,
    Array
    (
        [user_id] => 3,
        [user_id] => 4
    )
)

我尝试使用组它不起作用,如果我尝试使用子查询,我会收到错误消息“子查询返回超过 1 行。”

是否有可能使用 mysql 查询来实现这种结果?

4

5 回答 5

1

MYSQL 未在结果集中提供自定义。一旦从 mysql 获得所需的结果集,您将需要使用 PHP 准备所需的数组。

于 2013-05-16T04:58:42.197 回答
1

您无法使用纯 mysql 实现您想要的 ..

您需要一些服务器端语言来进行所需的自定义。

在php中你可以这样做

$req_array     = array();
$con           = mysqli_connect("localhost","my_user","my_password","my_db");
$result        = mysqli_query($con, "SELECT * FROM `table`");
while($row = mysqli_fetch_assoc($result)) 
{
    $req_array[$row['cat_id']][] = $row['user_id'];
}

现在根据需要更改此数组

$result_array  = array();
foreach($req_array as $key=>$value)
{
  $result_array[]  = array('cat_id'=>$key,'users'=>$value)
}
print_r($result_array);
于 2013-05-16T05:12:33.753 回答
0

为了减轻一些痛苦并在一次往返 MySql 中获得所有user_id值分组,cat_id您可以使用GROUP_CONCAT(). 您的查询看起来像

SELECT cat_id, GROUP_CONCAT(user_id) user_id 
  FROM table1 GROUP BY cat_id

输出:

| CAT_ID | USER_ID |
--------------------
|     10 |     1,2 |
|     11 |     3,4 |

SQLFiddle

然后遍历结果集并explode()按照您想要的方式构建新数组。

于 2013-05-16T06:07:33.933 回答
0

不, MySQL api 函数提供记录的结果集。他们无法根据您的要求进行定制。您必须创建自己的函数来开发该格式。

首先获取唯一的类别 ID,然后他们循环遍历它们以获取剩余的详细信息。

$mainArray = []; //Create a array to store the records
$result = mysqli_query($conn, "SELECT DISTINCT('cat_id') as catid FROM `yourtable`");
while($row = mysqli_fetch_assoc($result)) {       

    //Now another query to fetch the users
    $res = mysqli_query($conn, "SELECT * FROM `yourtable` WHERE cat_id='$row[0]'");

    $users = array(); //array to store users
    while($r = mysqli_fetch_assoc($res)) {
         $users[] = $r['user_id'];
    }

    // Now add to your main array
    $mainArray[] = array('cat_id' => $row['catid'], "users" => $users);
}
var_dump($mainArray);
于 2013-05-16T04:54:53.193 回答
0

我能够使用 PHP 做到这一点,但我想知道它是否可能使用纯 mysql 查询。感谢您的所有建议。在 PHP while 循环和数组的帮助下,我实现了以下结果。

大批
(
    [0] => 数组
        (
            [catid] => 10
            [0] => 数组
                (
                    [0] => 数组
                        (
                            [user_id] => 1
                        )

                    [1] => 数组
                        (
                            [user_id] => 2
                        )

                )

        )

    [1] => 数组
        (
            [catid] => 11
            [0] => 数组
                (
                    [0] => 数组
                        (
                            [user_id] => 3
                        )

                    [1] => 数组
                        (
                            [user_id] => 4
                        )

                )

        )

)
于 2013-05-16T05:46:20.433 回答