2010-08-25 2 views
0

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

У меня есть 4 таблицы

статей - идентификатор, category_id, user_id
категории - ID
article_category - article_id, category_id
пользователей - ID

category_id в таблице статье используется определение основная категория

Теперь я хочу получить все статьи, поэтому я использую запрос ниже.

В статье могут быть более одной категории. Я хочу, чтобы увидеть список статей с основной информацией категории прикрепленного

ВЫБРАТЬ а. *, C.title, c.slug из статей а, article_category переменного тока, категории с, пользователи у
ГДЕ 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

WHERE ac.article_id = a.category_id, должно быть WHERE ac.category_id = a.category_id –

+0

Можете ли вы быть более конкретным? Вы получаете информацию о «основной» категории для всех статей? Могут ли ваши статьи иметь более одной категории? Вы хотите увидеть каждую статью один раз или повторить для каждой категории, прикрепленной к ней? – Cfreak

+0

Статья @cfreak может иметь более одной категории. Я хочу просмотреть всю статью один раз с прилагаемой основной информацией о категории – Lylo

ответ

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

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