我有一个以这种方式构建的posts
表:
id | title | content | tags
和tags
表
id | name | description
我将这些标记放在posts
表中:3,2,5,8
其中数字是tags
表的相应行号。现在,通过标签选择我帖子中相关帖子的好方法是什么?
SELECT * FROM posts WHERE tags ? LIMIT 10
我的逻辑非常糟糕。
答案 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或其他任何东西......