База данных PHP Запрос данных внешнего ключа из базы данных - PullRequest
0 голосов
/ 27 сентября 2018

Я пытаюсь создать простую систему блогов.Таблица базы данных, как показано ниже.

Сообщений

+----+----------+-------------+
|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, ООП, Best Practices.Как я могу справиться с этим с помощью OOP PHP.

И, пожалуйста, также предоставьте ваши ответы для получения категорий.

Я не хочу присоединяться к таблицам post_categories и posts для получения данныхпотому что там есть еще несколько столбцов.

Также может быть несколько категорий в одном сообщении.

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Ваш ответ немного широк. Что касается вашей конкретной реализации, я бы объединил запросы категорий, сгенерировал бы вывод и повторил бы его один раз

<?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;
?>

Если вы хотите еще какой-то порядок, я бы порекомендовалработать с framework , который поможет вам навести порядок и, возможно, прочитать о MVC

0 голосов
/ 27 сентября 2018

почему вы не хотите присоединяться .. ваш код сложнее и дороже, чем один присоединенный запрос

    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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...