Привет, мне нужна помощь с запросом.
У меня есть 4 таблицы
articles - id, category_id, user_id
категории - id
article_category - article_id, category_id
пользователей - id
Используется category_id в таблице статей, определяющая основную категорию
Теперь я хочу получить все статьи, поэтому я использую запрос ниже.
Статья может содержать более одной категории. Я хочу увидеть список статей с прикрепленной основной категорией.
SELECT a. *, c.title, c.slug
FROM articles a, article_category ac, категории c, пользователи u
WHERE ac.article_id = a.category_id предполагается ac.article_id = a.id
И ac.category_id = c.id
И a.user_id = u.id
И ac.category_id = '1'
Проблема с этим запросом заключается в том, что я получаю неправильную информацию о категории, и я не думаю, что я должен запустить подзапрос, подобный ниже, чтобы решить его.
(выберите заголовок из категорий, где id = a.category_id) в качестве заголовка
Спасибо
Удалена таблица пользователей из запроса (не используется вообще), изменилось условие от ac.article_id = a.category_id к ac.category_id = a.category_id
SELECT a.*, c.title , c.slug
FROM articles a, article_category ac, categories c
WHERE ac.category_id = a.category_id
AND ac.category_id = c.id
AND ac.category_id = '1'
Ваши предложения о присоединении были неверными. Я переписал его в синтаксисе ANSI, чтобы сделать его более читаемым, а предложения JOIN
более явными:
SELECT a.*, c.title , c.slug
FROM articles a
INNER JOIN article_category ac on ac.category_id = a.category_id
INNER JOIN categories c on ac.category_id = c.id
INNER JOIN users u on a.user_id = u.id
WHERE ac.category_id = '1'
Кстати, вы присоединяетесь к таблице users
, но не выбираете из нее какие-либо столбцы, поэтому вы можете удалить это соединение, если вы не используете его для фильтрации результатов.
select a.*, c.title, c.slug
from articles a
join article_category ac on a.id = ac.article_id
join categories c on ac.category_id = c.id
join users u on a.user_id = u.id
where c.id = 1
вы присоединяетесь к article_id = category_id, это не имеет смысла, попробуйте вместо этого:
SELECT a.*, c.title , c.slug FROM articles a, article_category ac, categories c, users u
WHERE ac.category_id = a.category_id
AND ac.category_id = c.id
AND a.user_id = u.id
AND ac.category_id = '1'