Задать вопрос
@Maloy123

Как выбрать все одним запросом?

Всем привет! Имеется такая структура базы:

content
|------
|id|title|content|user
|------
|1|Заголовок контента 1|Контент 1|1
|2|Заголовок контента 2|Контент 2|2
|3|Заголовок контента 3|Контент 3|1

categories
|------
|id|name
|------
|1|Категория 1
|2|Категория 2
|3|Категория 3
|4|Категория 4
|5|Категория 5

content_categories
|------
|id|content_id|category_id
|------
|1|1|2
|2|1|3
|3|1|5
|4|2|1
|5|2|4

files
|------
|id|content_id|file_name|path
|------
|1|1|Фото.png|files/1/42/3332.png
|2|1|Фото.jpg|files/3/77/3532.jpg
|3|2|Документ.doc|files/5/7388853.doc

users
|------
|id|name
|------
|1|Павел
|2|Мария

Выполняются 3 запроса

Запрос 1
SELECT
	`c`.*, `u`.`name` AS `user_name`
FROM
	`content` AS `c`
	LEFT JOIN `users` AS `u` ON `u`.`id` = `c`.`user`
WHERE
	`c`.`id` = 1


Запрос 2
SELECT
	`c`.*
FROM
	`content_categories` AS `cc`
	LEFT JOIN `categories` AS `c` ON `c`.`id` = `cc`.`category_id`
WHERE
	`cc`.`content_id` = 1


Запрос 3
SELECT
	`id`, `file_name`, `path`
FROM
	`files`
WHERE
	`content_id` = 1


Получаем такой результат
Array
(
    [id] => 1
    [title] => Заголовок контента 1
    [content] => Контент 1
    [user] => 1
    [user_name] => Павел
    [categories] => Array
        (
            [0] => Array
                (
                    [id] => 2
                    [name] => Категория 2
                )

            [1] => Array
                (
                    [id] => 3
                    [name] => Категория 3
                )

            [2] => Array
                (
                    [id] => 5
                    [name] => Категория 5
                )

        )

    [files] => Array
        (
            [0] => Array
                (
                    [id] => 1
                    [file_name] => Фото.png
                    [path] => files/1/42/3332.png
                )

            [1] => Array
                (
                    [id] => 2
                    [file_name] => Фото.jpg
                    [path] => files/3/77/3532.jpg
                )
        )
)


Можно ли объединить эти 3 запроса, что бы получить такой же результат, или хотя бы примерно такой?
  • Вопрос задан
  • 127 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
@maxyc_webber
Web-программист
не стоит оно того. вы на спичках экономите. но для общего развития - LEFT JOIN изучите
Ответ написан
ThunderCat
@ThunderCat Куратор тега MySQL
{PHP, MySql, HTML, JS, CSS} developer
Ну, для начала, запрос ВСЕГДА возвращает "плоский" массив, ни о какой вложенности речи нет, а во вторых(хотя и первого имхо достаточно) - потери на вычисление перемножений таблиц между собой будет больше, чем разница в скорости отдельных выборок + сортировка в пхп.
Ответ написан
Ваш ответ на вопрос

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

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