2017-02-07 1 views
0

Ich habe die folgende Abfrage, die gut funktioniert, wenn die Ebene nur 1 Ebene tief ist, aber wenn es mehrere Ebenen gibt, verursacht die Abfrage Probleme, da es die verschachtelten Ebenenmysql Bindung an die Eltern Kind Beziehung Abfrage

nicht zeigt
SELECT 
    question.question, 
    answer.answer, 
    answer.questionid, 
    answer.pid, 
    question.DateAdded, 
    answer.DateAdded 
    FROM 
    answer 
    RIGHT JOIN question ON answer.questionid = question.id 

bitte leite als wie ich Ansatz ca

meine Tabellenstruktur ist wie folgt:

Frage Tisch:

id 
question 
DateAdded 

Antworten Tabelle:

pid 
answer 
questionid 
DateAdded 

von Nested-Ebene bedeutet, dass Eintrag in den Antworten Tabelle der pid der Antworten Tabelle und in das questionid Feld mit eingefügt wird

+0

Wie ich verstehen kann, bezieht sich Ihre 'pid' auf' quiestionid' Feld. Sie haben also eine Antwortbaumstruktur. Sie möchten diese Baumstruktur wahrscheinlich irgendwo anzeigen. Habe ich recht? –

+0

Ja, ich mache es in einer Auswahlbox, aber als ich einen Eintrag gemacht habe, zeige ich es an. denn ab jetzt verwende ich ul> li Struktur – Sam

+0

Ich fürchte, Sie werden nicht in der Lage sein, alle Informationen in einer einzigen Abfrage zu erhalten. Dazu müssen Sie einen neuen 'Join' hinzufügen, um jede neue Ebene zu aktivieren. Daran könnten Sie denken. Vergessen. –

Antwort

0

Angenommen, Sie haben die folgenden html eingefügt Markup mit Pseudocode Server-Sprache.

Question:<br/> 
{{question.question}}<br/> 

Answers:<br/> 
<ul> 
{{foreach answer in getRootAnswers(question.id)}} 
    <li>{{printAnswer(answer)}}</li> 
{{/foreach}} 
</ul> 

getRootAnswers(questionId) Funktion liefert eine Top-Level-Antwort, wo pid null ist. Es sollte eine Abfrage wie

SELECT 
    answer, 
    id, 
    DateAdded 
    FROM answer 
    WHERE questionid = @questionId AND pid is null 
    ORDER BY DateAdded 

printAnswer werden Erzeugen eines Markup

Added on: {{answer.DateAdded}}<br/> 
{{answer.answer}}<br/> 
<ul> 
{{foreach childAnswer in getChildAnswers(answer.id)}} 
    <li>{{printAnswer(childAnswer)}}</li> 
{{/foreach}} 
<ul> 

Das Markup werden zuerst gedruckt answer Informationen erzeugen. Dann wird es Kinder Antworten der answer drucken. Hinweis printAnswer rekursiver Aufruf.

getChildAnswers(parentId) Funktion wird ein Kind Antworten wo der von parentId identifiziert beantworten. Es sollte eine Abfrage wie

SELECT 
    answer, 
    id, 
    DateAdded 
    FROM answer 
    WHERE pid = @parentId 
    ORDER BY DateAdded 

generieren Sie am Ende haben eine einzige Abfrage für jeden Knoten in der Antwort-Struktur.

Verwandte Themen