这里是我的表结构:如何选择所有包含特定标签的帖子?
// posts
+----+-----------+---------------------+-------------+
| id | title | body | keywords |
+----+-----------+---------------------+-------------+
| 1 | title1 | Something here | php,oop |
| 2 | title2 | Something else | html,css,js |
+----+-----------+---------------------+-------------+
// tags
+----+----------+
| id | name |
+----+----------+
| 1 | php |
| 2 | oop |
| 3 | html |
| 4 | css |
| 5 | js |
+----+----------+
// pivot
+---------+--------+
| post_id | tag_id |
+---------+--------+
| 1 | 1 |
| 1 | 2 |
| 2 | 3 |
| 2 | 4 |
| 2 | 5 |
+---------+--------+
好的,那我有两个标签(php
和html
),我需要选择标有他们的所有帖子。我怎样才能做到这一点?
目前我使用REGEXP
,只是选择什么,我想是这样的:
SELECT * FROM posts WHERE keywords REGEXP 'php|html';
看到了吗?我甚至不使用1 join
。现在我的数据集已经长大了,我的查询需要一段时间才能执行。我想我必须使用像join
这样的关系特性。不过,我不确定它会比我目前的查询更好。
无论如何,有谁知道,我怎么能更快地得到预期的结果?
你应该正常化你的数据(关键字内容)在适当的相关表 – scaisEdge
在posts表中应该有标签ID列,然后你可以从帖子表中选择。 – OsamaKhalid
@scaisEdge你的意思是?如果你写了一个答案并解释你建议的数据库设计,那么我会很满意。 –