С помощью следующего запроса:MySQL JOIN + подзапрос
SELECT p.*, i.*, GROUP_CONCAT(DISTINCT(pc.category_id)) AS post_categories, GROUP_CONCAT(DISTINCT(pt.tag_id)) AS post_tags
FROM posts AS p
LEFT JOIN images AS i ON p.post_image = i.image_id
LEFT JOIN post_categories AS pc ON p.post_id = pc.post_id
LEFT JOIN post_tags AS pt ON p.post_id = pt.post_id
WHERE p.post_url="'.$id.'"
Я возвращаюсь список сообщений в блоге, извлекая:
- каждый столбец из таблицы сообщений
- каждый столбец из Таблица изображений (для изображения)
- a Объединение всех
category_id
(для публикации) - a conca tenation всех
tag_id
-х (на должность)
Что это оставляет меня, два поля, которые не очень полезны:
- строка сцепленных category_id (т.е. «1,3»)
- и каскадный строка tag_id (т.е. «2,5,8»)
Я действительно хотел бы сделать подзапрос в обоих LEFT JOINS
, что позволяет мне, вместо того, возвращающие список:
category_name
's (т.е. "медитация, спорт")tag_name
' s (т.е. "IOS, PHP, MySQL")
для каждого сообщения.
Я застрял прямо сейчас в подзапросе как для категорий, так и для тегов.
В таблице структуры:
сообщений
post_id, post_title и т.д.
категории
CATEGORY_ID, category_name
теги
tag_id, tag_name
post_categories
post_id, category_id
post_tags
post_id, tag_id
Вопрос: можно ли эффективно делать такие вещи, если да, то как?
Если нет, то я должен просто хранить SELECT * FROM categories
в $categories
массиве, а затем сравнить каждый category_id
в $categories
массива каждый пост взорвалось category_id
строку в $posts
массив каждый раз?
Извиняюсь, я просто был идиотом. – cammil