Hier ist meine Tabellenstruktur:Wie kann ich alle Beiträge auswählen, die bestimmte Tags haben?
// 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 |
+---------+--------+
Ok gut, ich habe zwei Tags (php
und html
) und ich brauche alle Beiträge mit ihnen markiert auszuwählen. Wie kann ich das machen?
Derzeit verwende ich REGEXP
und wählen Sie einfach, was ich so wollen:
SELECT * FROM posts WHERE keywords REGEXP 'php|html';
sehen? Ich benutze nicht einmal 1 join
. Heutzutage ist mein Dataset groß und meine Abfrage dauert eine Weile, bis sie ausgeführt wird. Ich denke, ich muss ein relationales Feature wie join
verwenden. Ich bin mir jedoch nicht sicher, ob es besser wäre als meine aktuelle Anfrage.
Wie auch immer, weiß jemand, wie kann ich das erwartete Ergebnis schneller erhalten?
sollten Sie normalisieren Sie Daten (Schlüsselwörter Inhalt) in der richtigen verwandten Tabelle – scaisEdge
In Posts-Tabelle sollte Spalte mit Tags IDs und dann können Sie aus Posts Tabelle auswählen. – OsamaKhalid
@scaisEdge Wie genau meinst du? Ich würde angesprochen werden, wenn Sie eine Antwort schreiben und Ihr vorgeschlagenes Datenbankdesign erklären. –