需要知道mysql查询是否可以获得此类型的结果

时间:2013-05-16 04:51:27

标签: mysql sql

我有一个像下面的表结构

+--------+---------+
| 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查询可以实现这种结果吗?

5 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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);

答案 2 :(得分: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);

答案 3 :(得分:0)

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

Array
(
    [0] => Array
        (
            [catid] => 10
            [0] => Array
                (
                    [0] => Array
                        (
                            [user_id] => 1
                        )

                    [1] => Array
                        (
                            [user_id] => 2
                        )

                )

        )

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

                    [1] => Array
                        (
                            [user_id] => 4
                        )

                )

        )

)

答案 4 :(得分:0)

为了缓解一些痛苦,并在{I}}的一次往返中将所有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()以您希望的方式构建新数组。