Mysql Присоединиться к выпуску

0

Привет, мне нужна помощь с запросом.

У меня есть 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) в качестве заголовка

Спасибо

  • 0
    ГДЕ ac.article_id = a.category_id, должно быть ГДЕ ac.category_id = a.category_id
  • 0
    Можете быть более конкретными? Получаете ли вы информацию об основной категории для всех статей? Могут ли ваши статьи иметь более одной категории? Желаете ли вы увидеть каждую статью один раз или повторить для каждой категории?
Показать ещё 1 комментарий
Теги:

4 ответа

0

Удалена таблица пользователей из запроса (не используется вообще), изменилось условие от 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'
0

Ваши предложения о присоединении были неверными. Я переписал его в синтаксисе 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, но не выбираете из нее какие-либо столбцы, поэтому вы можете удалить это соединение, если вы не используете его для фильтрации результатов.

0
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
0

вы присоединяетесь к 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'

Ещё вопросы

Сообщество Overcoder
Наверх
Меню