這裏是我的表結構:如何選擇所有包含特定標籤的帖子?
// 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你的意思是?如果你寫了一個答案並解釋你建議的數據庫設計,那麼我會很滿意。 –