Структура запроса Mysql для поиска в двух таблицах - PullRequest
0 голосов
/ 17 мая 2011

У меня есть две таблицы, структурированные следующим образом:

Posts Table
id
content

Meta Table
id
post_id
content
name

Таблица posts - это основной родитель, к которому могут быть присоединены данные из мета таблицы

Post Table
id   content
1    My first row

Meta Table
id   post_id  content   name
4    1        2011-5-5    date
5    1        My Heading  heading
6    2        2012-3-3    date
7    2        My Title    heading

Как бы янаписать запрос для поиска записи в таблице публикаций, которая содержит метаданные контента 2011-5-5 с именем даты и Моим заголовком с названием заголовка

Я могу получить их индивидуально

Select *
from posts, meta
WHERE post_id = posts.id
   AND (name='date' AND content='2011-5-5')

Но как только я добавляю второй критерий, он возвращает ноль результатов, потому что мы просим, ​​чтобы в поле имени были две разные вещи

Select *
from posts, meta
WHERE post_id = posts.id
   AND (name='date' AND content='2011-5-5') 
   AND (name='heading' AND content='My Heading')

Любая помощь будет принята с благодарностью, спасибо!

Ответы [ 3 ]

1 голос
/ 17 мая 2011

Вам нужно присоединиться к мета-таблице дважды (один раз для каждого поиска) - вот так:

Select * 
from posts p 
 join meta m_date on m_date.post_id = p.id AND m_date.name='date'
 join meta m_heading on m_heading.post_id = p.id AND m_heading.name='heading'
where
 m_date.content = '2011-5-5' and
 m_heading.content = 'My Heading'
1 голос
/ 17 мая 2011

Вам нужно присоединиться к столу дважды:

SELECT *
FROM posts, meta m1, meta m2
WHERE posts.id=m1.post_id
AND posts.id=m2.post_id
AND m1.name="date" AND m1.content="2011-5-5"
AND m2.name="heading" AND m2.content="My Heading"
1 голос
/ 17 мая 2011

Вы пробовали это:

Select *
from posts, meta, meta meta_2
WHERE (meta.post_id = posts.id
      and meta_2.post_id = posts.id)
   AND ((meta.name='date' AND meta.content='2011-5-5') 
       and (meta_2.name='heading' AND meta_2.content='My Heading'))

Поскольку есть две разные записи meta, которые вы хотите связать с одной записью post, вам придется выбирать из meta дважды (один раз для мета-значения date и один раз для заголовка 'мета-значение).

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