我有一个像下面的表结构
+--------+---------+
| 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查询可以实现这种结果吗?
答案 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()
以您希望的方式构建新数组。