1

我有一个posts这样结构的表:

id  |  title  |  content  |  tags

和一张tags桌子

id  |  name  |  description

posts我以这种方式将我的标签放在表格中:3,2,5,8数字是tags表格的相应行号。现在,我可以通过标签在我的帖子中选择相关帖子的好方法吗?

SELECT * FROM posts WHERE tags ? LIMIT 10

我逻辑很差。

4

3 回答 3

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.)
于 2012-04-07T10:30:44.347 回答
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 (?,?,?)
于 2012-04-07T10:29:23.923 回答
0
SELECT * FROM posts WHERE tags IN ( YOUR_COMMA_SEPRATED_TAG_IDS );

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

于 2012-04-07T10:29:01.410 回答