Ich habe eine Frage-und-Antwort-Website wie SO. Ich habe eine Tabelle wie folgt aus:Wie kann ich einen Beitrag und alle zugehörigen Beiträge auswählen?
// qanda
+----+----------+----------------------+---------+------+
| id | title | content | related | type |
+----+----------+----------------------+---------+------+
| 1 | a title | a content | NULL | 0 |
| 2 | | a content | 1 | 1 |
| 3 | a title | a content | NULL | 0 |
| 4 | | a content | 1 | 1 |
| 5 | | a content | 3 | 1 |
+----+----------+----------------------+---------+------+
/* type column: "0" means it is a question, "1" means it is a answer
related column: it contains the id number of its own question
*/
Jetzt muss ich eine Frage auswählen und alle ihre eigenen Antworten auf der Grundlage einer id
Nummer. (diese id
Nummer kann entweder die ID einer Frage oder die ID einer Antwort sein).
Hier ist meine aktuelle Abfrage:
SELECT * FROM qanda WHERE id = :id OR related = :id
Meine Abfrage funktioniert nur gut, wenn :id
die ID eine Frage. (Ich meine, es funktioniert nicht richtig, wenn :id
die ID einer Antwort sein).
Hier ist erwartetes Ergebnis:
assuming either :id = 1 or :id = 2 or :id = 4
+----+----------+----------------------+---------+------+
| id | title | content | related | type |
+----+----------+----------------------+---------+------+
| 1 | a title | a content | NULL | 0 |
| 2 | | a content | 1 | 1 |
| 4 | | a content | 1 | 1 |
+----+----------+----------------------+---------+------+
Wie ich bereits erwähnt, ich brauche diese drei Zeilen, wenn :id = 1
oder :id = 2
oder :id = 4
auszuwählen. Wie kann ich das machen?
Es wäre sinnvoller, Ihr Schema in eine Frage- und Antworttabelle zu unterteilen und dann eine Fremdschlüsseleinschränkung für jede Antwort auf die übergeordnete Frage zu haben. Dieses aktuelle Design ist ein Rezept für eine Katastrophe – Alex
@Alex Ich werde meine Datenbank-Design ändern * (Erstellen von zwei getrennten Tabelle für Fragen und Antworten) * wie das, was Sie in der nächsten Version meiner Website gesagt .. Derzeit muss ich das Problem lösen I ' m konfrontiert mit. –
Wie viele Daten speichern Sie gerade, wenn Sie jetzt zu einem neuen Datenbankdesign migrieren können, würde ich es sehr empfehlen. Sie werden einige ernsthafte Performance-Engpässe treffen, wenn Sie mit diesem aktuellen Design skalieren, – Alex