按标签检索相关帖子

时间:2012-04-07 10:21:33

标签: php mysql sql

我有一个以这种方式构建的posts表:

id  |  title  |  content  |  tags

tags

id  |  name  |  description

我将这些标记放在posts表中:3,2,5,8其中数字是tags表的相应行号。现在,通过标签选择我帖子中相关帖子的好方法是什么?

SELECT * FROM posts WHERE tags ? LIMIT 10

我的逻辑非常糟糕。

3 个答案:

答案 0 :(得分:3)

这是数据库规范化的用武之地。在一个列中存储多个标记ID并不是一个好主意。您应该创建一个新表post_tags,其结构为post_id | tag_id,以便将多个标记链接到一个帖子。

然后,您可以执行以下查询:

SELECT * FROM posts
INNER JOIN post_tags ON post_tags.post_id = posts.id
WHERE post_tags.tag_id IN(id1,id2,etc.)

答案 1 :(得分:2)

您最好更改数据库设计。 为帖子和标签的关系创建一个新表。

create table post_tags (
  post_id int,
  tag_id int
)

然后您可以使用join来选择您的数据,如:

SELECT 
    p.* 
FROM 
    posts p 
LEFT JOIN 
    post_tags pt ON p.id = pt.post_id 
WHERE 
    pt.tag_id IN (?,?,?)

答案 2 :(得分:0)

SELECT * FROM posts WHERE tags IN ( YOUR_COMMA_SEPRATED_TAG_IDS );

YOUR_COMMA_SEPRATED_TAG_IDS可以是: - 1或1,2,3或其他任何东西......