php数据库查询数据库外键数据

8ulbf1ek  于 2021-06-18  发布在  Mysql
关注(0)|答案(2)|浏览(332)

我尝试建立一个简单的博客系统。数据库表如下所示。
帖子

+----+----------+-------------+
|id  | title    | content     |
+----+----------+-------------+
|1   | Tile     | Content     |
+----+----------+-------------+
|2   | Tile 2   | Content 2   |
+----+----------+-------------+

类别

+--------+-------------+
|id      | category    |
+--------+-------------+
|1       | Category1   |
+--------+-------------+
|2       | Category2   |
+--------+-------------+
|3       | Category3   |
+--------+-------------+

职位类别

+--------+-------------+
|postID  | categoryID  |
+--------+-------------+
|1       | 1           |
+--------+-------------+
|1       | 2           |
+--------+-------------+
|1       | 3           |
+--------+-------------+
|2       | 2           |
+--------+-------------+
|2       | 3           |
+--------+-------------+

我用这个密码

<?php
    $posts = DB::get("SELECT * FROM `posts` LIMIT 5");
    foreach ($posts as $post) {
        echo $post["title"];

        $category_ids = DB::get("SELECT categoryID FROM `post_categories` WHERE postID = " . $post["id"]);

        $ids = join(", ", $category_ids);

        $categorys = DB::get("SELECT * FROM `categories` WHERE id IN (" . $ids . ")");

        foreach ($categorys as $category) {
            echo '<a href="...">' . $category["category"] . '</a>';
        }

        echo $post["content"];
    }
?>

我知道这不是获取类别的好方法。
甚至它一次又一次地查询同一个类别。
有谁能给我一些指导方针/资源/教程来学习php逻辑、oop和最佳实践吗。如何使用oop-php处理这个问题。
也请提供你的ans获取类别。
我不想加入 post_categories 以及 posts 表来获取数据,因为其中没有更多的列。
在一篇文章中也可能有多个类别。

vc9ivgsu

vc9ivgsu1#

关于具体实现,您的答案有点宽泛,我将合并类别查询,生成输出并回显一次

<?php
    $posts = DB::get("SELECT * FROM `posts` LIMIT 5");
$output = '';
    foreach ($posts as $post) {
     $categories = DB::get("SELECT c.* FROM `post_categories` pc INNER JOIN categories c ON c.id = pc.category_id WHERE id = " . $post["id"]);

        $output .= $post["title"];

        foreach ($categories as $category) {
            $output .=  '<a href="...">' . $category["category"] . '</a>';
        }

        $output .=  $post["content"];
    }

echo $output;
?>

如果你想要更多的顺序,我建议你使用一个框架,这将帮助你把事情安排好,也许可以阅读一篇关于mvc的文章

w1jd8yoj

w1jd8yoj2#

为什么你不想加入。。与单个联接查询相比,您的代码更为复杂,时间也更为昂贵

SELECT * FROM `posts` LIMIT 5

    SELECT p.content, p.title, c.category  FROM `categories` c 
    INNER JOIN  `post_categories` pc on pc.id = c.id 
    INNER JOIN (
        SELECT id, content, title FROM `posts` LIMIT 5
    ) p on p.id = c.id

相关问题