@happ

Как производить выборку постов и тегов из Б.Д.?

Выборка к примеру 10 постов, у каждого поста может быть произвольное количество тегов, например 5. Как правильно сделать выборку? как её делать в таком случае, одним запросом или делать дополнительные запросы при переборе массива из Б.Д.?
  • Вопрос задан
  • 291 просмотр
Решения вопроса 2
DmitriyEntelis
@DmitriyEntelis
Думаю за деньги
Очень люблю задавать этот вопрос на собеседованиях)
Правильный на мой взгляд ответ: в зависимости от нагрузки.
1. Очевидное быстрое решение - тупо 3НФ в базе, 1 запрос на получение списка постов, еще 1-2 запроса на получение всех тегов из всех этих постов, мерж массивов на ЯП.
2. По мере появления нагрузки можно заниматься различными денормализациями (как минимум можно денормализованно хранить id тегов, как максимум и текстовки тегов тоже).
Ответ написан
Alyovkin
@Alyovkin
Full-stack developer
Например
SELECT posts.id, GROUP_CONCAT(tags.id)
FROM posts
  LEFT JOIN tags ON posts.id = tags.post_id
GROUP BY post.id
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@entermix
Сделать дополнительный запрос

UPD:
Как то так:
$posts = $sql->get("SELECT `id`, `name` FROM `posts` WHERE 1");

foreach ($posts as $post) {
    echo $post->name;

    $tags = $sql->get("SELECT `id`, `name` FROM `post_tags` WHERE `post_id` = $post->id");

    foreach ($tags as $tag) {
        echo $tag->name;
    }
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы