我有一个posts
这样结构的表:
id | title | content | tags
和一张tags
桌子
id | name | description
posts
我以这种方式将我的标签放在表格中:3,2,5,8
数字是tags
表格的相应行号。现在,我可以通过标签在我的帖子中选择相关帖子的好方法吗?
SELECT * FROM posts WHERE tags ? LIMIT 10
我逻辑很差。
这就是数据库规范化的用武之地。在单个列中存储多个标签 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.)
你最好改变你的数据库设计。为帖子和标签的关系创建一个新表。
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 (?,?,?)
SELECT * FROM posts WHERE tags IN ( YOUR_COMMA_SEPRATED_TAG_IDS );
YOUR_COMMA_SEPRATED_TAG_IDS
可以是:- 1 OR 1,2,3 或任何其他...