Php MySQLi-返回二维数组
有没有办法让MySQLi返回多维数组 假设我从数据库中选择博客帖子,每个帖子都有多个标签。据我所知,我会这样做:Php MySQLi-返回二维数组,php,mysqli,Php,Mysqli,有没有办法让MySQLi返回多维数组 假设我从数据库中选择博客帖子,每个帖子都有多个标签。据我所知,我会这样做: $r = $mysqli->query("SELECT * FROM posts"); while ($post = $r->fetch_assoc()) { //echo blog posts $t = $mysqli->query("SELECT * FROM blog_tags INNER JOIN tags ON tags.id = blog_
$r = $mysqli->query("SELECT * FROM posts");
while ($post = $r->fetch_assoc()) {
//echo blog posts
$t = $mysqli->query("SELECT * FROM blog_tags INNER JOIN tags ON tags.id = blog_tags.tag_id WHERE post_tags.post_id = ".$post['id']);
while($tag = $t->fetch_assoc()){
//echo tags
}
}
但我更喜欢这样做:
$r = $mysqli->query("SELECT * FROM posts INNER JOIN post_tags ON posts.id = post_tags.post_id INNER JOIN tags ON tags.id = post_tags.tag_id");
while($post = $r->fetch_assoc()){
//echo post
foreach($post['tags'] as $tag){
//echo tags
}
}
因此,回报将是:
$posts = array(
"id" => 1,
"title" => "Blog post 1",
"content" => "Lorem ipsum...",
"tags" =>
array(
"tag1",
"tag2",
"tag3"
),
"posted" => "1-1-2010 11:11:11"
);
您需要使用
GROUP BY
和GROUP\u CONCAT
。我猜标记名字段名为name
SELECT posts.*, GROUP_CONCAT(tags.name) as tagnames FROM posts
INNER JOIN post_tags ON posts.id = post_tags.post_id
INNER JOIN tags ON tags.id = post_tags.tag_id
GROUP BY posts.id
然后,当您得到结果时,您可以
分解(“,”,$t->标记名)
以获得一个标记数组。我知道这不是很有帮助,但是如果您想要像这样查询和更新数据,您可能需要看看没有像MongoDB这样的sql解决方案。你在对象上插入和查询,结果和你发布的一模一样。看起来很有趣,一定会尝试的!