用于搜索两个表的Mysql Query结构

时间:2011-05-16 21:57:54

标签: mysql sql

我有两张桌子像这样:

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

如何编写查询以在posts表中搜索包含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 个答案:

答案 0 :(得分:1)

你试过这个:

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中选择两次(一次用于'日期'元值并且一次用于'标题'元值。)

答案 1 :(得分:1)

您需要两次加入元表(每次搜索一次) - 就像这样:

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'

答案 2 :(得分:1)

你需要两次加入桌子:

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"