我有两张桌子像这样:
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')
非常感谢任何帮助,谢谢!
答案 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"