MySQL从3个表中选择并将其放入PHP数组中

MySQL从3个表中选择并将其放入PHP数组中,php,mysql,select,join,Php,Mysql,Select,Join,对不起,英语不好,标题不好 我有一张桌子“post” 所以有了“标签” 所以有一个post_标签 tagid tagname 1 test 2 russia 3 new site tagid postid 1 1 2 1 3 1 我需要下面var_dump中的数组: $posts = array( 1 => array( 'title' => 'test Thread'

对不起,英语不好,标题不好

我有一张桌子“post”

所以有了“标签”

所以有一个post_标签

tagid   tagname
1       test
2       russia
3       new site
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'])
        );
    }
}
如果您已经看到一行具有相同的post id,那么您只需要当前行中的标记名(因此将其添加到“tags”数组)。如果是第一次看到具有此post id的行,只需将其添加到
$posts
,小心地将“标记”设置为
null
或具有一个元素的数组。

尝试以下操作:

while ($row = mysql_fetch_assoc($query))
{
    if( !isset( $posts[$row["id"]] ) ) {
        $posts[ $row["id"] ] = array( "title" => $row["title"], "tags" => array() );
    }
    array_push( $posts[ $row["id"] ][ "tags" ], $row["tagname"] );
}

我无法调试它,所以如果您遇到任何错误,请告诉我您无法从mysql数据库中获取多维数组。如果您希望以那种形式显示结果,则必须对结果进行自己的后处理。也许是这样的

$posts = array();
while ($row = mysql_fetch_assoc($query))
{
    if (!isset($posts[$row['id']])) {
        $posts[$row['id']] = array();
        $posts[$row['id']]['title'] = $row['title'];
        $posts[$row['id']]['tags'] = array();
    }
    if ($row['tagname'] != null) $posts[$row['id']]['tags'][] = $row['tagname'];
}

您无法从mysql数据库获取多维数组。如果希望结果以那种形式出现,则必须对其进行自己的后处理。仅供参考:只有在使用保留字时,才需要转义表名/字段名。将所有内容转储到backticks中只会使查询更难阅读。
$posts = array();
while ($row = mysql_fetch_assoc($query))
{
    if (!isset($posts[$row['id']])) {
        $posts[$row['id']] = array();
        $posts[$row['id']]['title'] = $row['title'];
        $posts[$row['id']]['tags'] = array();
    }
    if ($row['tagname'] != null) $posts[$row['id']]['tags'][] = $row['tagname'];
}