Как запросить 3 таблицы в одном запросе? - PullRequest
1 голос
/ 14 ноября 2010

Мне очень жаль за первый пост, так как я не все объяснил.

В основном у меня есть 3 таблицы, одна для сообщений, одна для категорий и другая для связи категорий с сообщениями.

Я хочу в одном запросе MySQL выбрать сообщения, относящиеся к определенной категории.

posts(id,title,body)
---------------------
125,Some title,Blah blah


categories(id,name)
---------------------
1,politic
2,entertainment

linker(categoryid,postid)
---------------------
2,125

Я хочу в одном запросе извлекать сообщения в категории развлечений, например, что делать?

Спасибо

Ответы [ 5 ]

3 голосов
/ 14 ноября 2010
select 
     p.*
from 
     posts p
     inner join linker l on l.postid = p.id
     inner join categories c on c.categoryid = l.categoryid
where 
     c.name = 'entertainment'
0 голосов
/ 14 ноября 2010

Если вы указываете только одну категорию в предложении WHERE, то результатом будет одна строка для каждого идентификатора записи.

В любом случае вы можете использовать DISTINCT или GROUP BY, если результат может быть большеодна строка на ID, но в этом случае я предпочитаю вторую (GROUP BY).

0 голосов
/ 14 ноября 2010

Если сообщение относится к 2 категориям, вы все равно можете использовать запрос pinkfloydx33 с DISTINCT в операторе select:

select 
     DISTINCT p.*
from 
     posts p
     inner join linker l on l.postid = p.id
     inner join categories c on c.categoryid = l.categoryid
where 
     c.name = 'entertainment'

В наборе результатов будет показана только одна запись.

0 голосов
/ 14 ноября 2010

Следующий оператор SQL должен предоставить вам основу для того, что вы пытаетесь сделать.

select p.*
from posts p
inner join linker l
on l.postid = p.id
inner join categories c
on l.categoryid = c.id
where c.name = 'entertainment'
0 голосов
/ 14 ноября 2010

Точно так же, вам просто нужно объединить 3 таблицы из 2:

SELECT P.id post_id,
       P.title,
       P.body,
       C.id category_id,
       C.name
FROM posts P
INNER JOIN linker L
    ON P.id = L.postid
INNER JOIN categories C
    ON L.categoryid = C.id
WHERE C.name = 'Category'

Не бойтесь делать свои собственные тестыЕсли вы понимаете, как объединить две таблицы, вы должны понимать, как объединить три, четыре и более.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...