【发布时间】:2017-06-08 20:22:22
【问题描述】:
这是我的表结构:
// 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 这样的关系功能。但是我不确定它会比我当前的查询更好。
无论如何,有人知道,我怎样才能更快地得到预期的结果?
【问题讨论】:
-
您应该在适当的相关表格中规范化您的数据(关键字内容)
-
在帖子表中应该有带有标签ID的列,然后您可以从帖子表中选择。
-
@scaisEdge 你到底是什么意思?如果您写一个答案并解释您建议的数据库设计,我会很高兴。
-
@MartinAJ 你可以使用like。 where(关键字如 '%php%' 或关键字如 '%html%')。