抱歉英语不好,标题不好!
我有表“post”
id title
1 test Thread
2 hello
3 just
还有“标签”
tagid tagname
1 test
2 russia
3 new site
所以有一个post_tags
tagid postid
1 1
2 1
3 1
下面我需要一个来自 var_dump 的数组:
$posts = array(
1 => array(
'title' => 'test Thread',
'tags' => array(
'test', 'russia', 'new site',
),
),
2 => array(
'title' => 'hello',
'tags' => NULL
),
3 => array(
'title' => 'just',
'tags' => NULL
),
)
我尝试这样做,但我没有得到我想要的。
SELECT `post`.`id`, `post`.`title`, `tags`.`tagname` FROM `post`
LEFT JOIN `post_tags` ON `post_tags`.`tagid` = `post`.`id`
LEFT JOIN `tags` ON `post_tags`.`tagid` = `tags`.`tagid`
我接下来进入 SQL:
id title tagname
1 test Thread test
1 test Thread russia
1 test Thread newsite
2 hello NULL
3 just NULL
PHP
$query = mysql_query("SELECT `post`.`id`, `post`.`title`, `tags`.`tagname` FROM `post`
LEFT JOIN `post_tags` ON `post_tags`.`tagid` = `post`.`id`
LEFT JOIN `tags` ON `post_tags`.`tagid` = `tags`.`tagid`");
$posts = array();
while ($row = mysql_fetch_assoc($query))
{
$posts[] = $row;
}
var_dump($posts);
谢谢!!!
最佳答案
查询没问题。你只需要在你的循环中有一些逻辑:
while ($row = mysql_fetch_assoc($query))
{
if (isset($posts[$row['id']])) {
$posts[$row['id']]['tags'][] = $row['tagname'];
}
else {
$posts[$row['id']] = array(
'title' => $row['title'],
'tags' => $row['tagname'] === null ? null : array($row['tagname'])
);
}
}
如果您已经看到具有相同帖子 ID 的行,那么您只需要从当前行中获取标签名称(因此将其添加到“标签”数组中)。如果这是第一次看到具有此帖子 ID 的行,只需将其添加到 $posts
,注意将“tags”设置为 null
或带有一个元素。
关于php - MySQL 从 3 个表中选择并将其放入 PHP 数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10096764/