Frage zu SQL Query... (gelöst)

Fragen zu allen anderen Programmiersprachen.
Benutzeravatar
Kukulkan
Beiträge: 1066
Registriert: 09.09.2004 07:07
Wohnort: Süddeutschland
Kontaktdaten:

Frage zu SQL Query... (gelöst)

Beitrag von Kukulkan »

Hallo,

Ich hab gerade eine Tabelle mit Fragen und Antworten. Jetzt sollte ich die Fragen und die Antworten sauber gegliedert ausgeben (Reihenfolge Frage-Antwort-Frage-Antwort...).

Daten-Beispiel:

Code: Alles auswählen

MessageID, Type, Text, AnswerToMessageID
1,          F,   Blabla,     NULL
2,          F,   Blabla,     NULL
3,          F,   Blabla,     NULL
4,          F,   Blabla,     NULL
5,          A,   Blabla,     2
6,          A,   Blabla,     4
7,          A,   Blabla,     1
8,          A,   Blabla,     3

Dabei steht F für Frage und A für Antwort. In AnswerToMessageID ist die MessageID der zugehörigen Frage gespeichert.
Wie muss der Select aussehen, damit ich die Datensätze in der Reihenfolge:

1,7,2,5,3,8,4,6

bekomme? Also immer die Frage und dann die zugehörige Antwort. Irgendwie finde ich keine passende ORDER BY Klausel :-(
Freue mich über jede Hilfe.

Eine Idee?

Volker
Zuletzt geändert von Kukulkan am 26.02.2009 10:51, insgesamt 1-mal geändert.
tmjuk
Beiträge: 380
Registriert: 30.06.2006 00:10
Wohnort: Backaryd, Schweden

Beitrag von tmjuk »

Gibt ja sicherlich mehrere Möglichkeiten.
Ich würde das wahrscheinlich so lösen:

1. Abfrage Select * from tabelle where Type = F
Die Ergebnisse in ein Array oder in einer Liste speichern.

Dann in Schleife Array oder Liste durchgehen
2. Abfrage Select * from tabelle where AnswerToMessageId = Id_aus Array
und dann natürlich bei jedem Schleifen durchgang ausgeben oder verarbeiten (je nachdem)


Was meinst du?

Torsten
PB 4.51 32 Windows Vista, 32 XP, PB 4.51 32 Ubuntu 10.10
Benutzeravatar
Kukulkan
Beiträge: 1066
Registriert: 09.09.2004 07:07
Wohnort: Süddeutschland
Kontaktdaten:

Beitrag von Kukulkan »

Hallo Torsten,
Dann in Schleife Array oder Liste durchgehen
Danke für deinen Tipp, das war auch meine erste Idee. Aber das geht auf keinen Fall. Dann habe ich bei 100 Fragen nämlich 101 Query's auf die Datenbank wo in der Tabelle eventuell bald einige tausend Fragen und Antworten stehen. Das wird mit der Methode ein echter Ressourcen-Fresser in der Datenbank.

Ich denke, es stehen genug Informationen zur Verfügung um das in einem SELECT sauber zurückzubekommen. Ich denke es bedarf eines Sub-Query, aber bekomme den einfach nicht hin.

SQL-Profis?

Volker
tmjuk
Beiträge: 380
Registriert: 30.06.2006 00:10
Wohnort: Backaryd, Schweden

Beitrag von tmjuk »

Ich weiss nicht.
Meiner Meinung nach brauchst du 2 Abfragen.
Die erste Abfrage, welche die Frage ausliest (das du also den Index fuer die Antwort bekommst) und dann die 2. um die die Antwort rauszusuchen.

Wie wäre es denn anstelle mit 2 Tabellen? Bleiben aber trotzdem 2 Abfragen.

Oder Frage und Antwort in einem Datensatzunterbringen.
Also z.B.

Code: Alles auswählen

Index   Frage(Text)   Antwort(Text)
1          Text              Text
2......
Deine Meinung?
Torsten
PB 4.51 32 Windows Vista, 32 XP, PB 4.51 32 Ubuntu 10.10
Benutzeravatar
Kukulkan
Beiträge: 1066
Registriert: 09.09.2004 07:07
Wohnort: Süddeutschland
Kontaktdaten:

Beitrag von Kukulkan »

Ich habe es gelöst! :bounce:

Einfacher als zuerst gedacht. So geht es:

Code: Alles auswählen

SELECT *, IF(Type='F', MessageID, AnswerToMessageID) AS Sorty
FROM tblmessages
WHERE (Type='F' OR Type='A')
ORDER BY Sorty ASC, Type DESC
Ich generiere eine Zusatz-Spalte "Sorty", welche bei Fragen die MessageID enthält und bei Antworten die AnswerToMessageID der Antwort. Wenn ich jetzt danach sortiere, dann habe ich Fragen und Antworten schonmal beieinander. Dann sortiere ich Anschliessend nach Type und habe immer schön erst die Frage und dann die Antwort. Die WHERE Bedingung brauche ich nur, weil es noch andere Sorten neben A und F gibt.

Dennoch danke für's mitdenken!

Volker
Antworten