在单个查询中查询2个表

时间:2010-11-14 00:46:24

标签: php sql mysql join

我有一个帖子表和一个类别表,我想要的是选择特定类别的帖子。问题是类别存储在另一个表而不是posts表中,这是示例:

帖子

id   title       body
---------------------------
125  Some title  Blah blah

类别

postid  category
----------------
125     politic

我希望在单个查询中通过示例获取政治类别中的帖子,该怎么办?

3 个答案:

答案 0 :(得分:4)

使用:

SELECT p.id,
       p.title, 
       p.body
  FROM POSTS p
  JOIN CATEGORIES c ON c.postid = p.id
 WHERE c.category = 'politic'

我对CATEGORIES表的问题是将类别值存储为字符串表示数据未规范化 - 您应该使用CATEGORY表:

CATEGORY

  • category_id(主键,auto_increment)
  • category_description

...并使用category_id表中的CATEGORIES值:

分类

  • category_id(主键,CATEGORY.category_id的外键)
  • post_id(主键,POSTS.postid的外键)

答案 1 :(得分:1)

select p.* 
from posts p 
inner join categories c 
       on p.id = c.postid 
where 
     c.category = 'politic'

答案 2 :(得分:0)

您需要加入查询中的两个表

SELECT *
FROM posts P
INNER JOIN categories C on C.post_id = P.id
WHERE C.category = 'politic'

您可以直观地(这不是技术上正确的解释)将此联接视为将类别字段附加到具有共享ID的帖子中的行(这是'on C.post_id = P.id')。 WHERE子句表示您只需要那些类别为“politic”的行。

内部联接是多种联接类型之一。左连接特别是另一个常见的连接,它在这种情况下的不同之处在于仍然会列出没有类别匹配的帖子行,但是对于类别中的字段,则为空。 (使用内连接这样的行不会保留)

http://en.wikipedia.org/wiki/Join_%28SQL%29