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

标签 php mysql select join

抱歉英语不好,标题不好!

我有表“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/

相关文章:

mysql - 如何将SQL/MySQL查询输出划分到多个表中?

mysql - 选择特定列 'condition' 时 SELECT 查询不起作用

jquery - 从 optgroup 中选择单个项目

EC2 上的 PHP 只是打印出我的 PHP 文件而不是执行

php - 紧凑型(): undefined variable in zendframework

mysql - 从 mysql 表中选择最新的

C# Linq 有四个表和一个并不总是需要的外键

html - 从下一个下拉菜单的第一个下拉菜单中隐藏所选选项

php - 如何在没有 AJAX、Jscript、HTML 隐藏字段或 cookie 的情况下从 JavaScript 变量获取值到 PHP 变量?

php - 使用 ENGINE 子句在迁移中创建表失败