oneside Geschrieben 14. April 2006 Teilen Geschrieben 14. April 2006 Hallo Leute, ich habe zwei MYSQL-Tabellen: Questions Feld: QuestionID Feld: QuestionName QuestionOptions Feld: OptionID Feld: OptionQuestionID Feld: OptionName Es gibt immer einen Datensatz in der Tabelle "Questions" und einen, keinen oder auch mehrere mögliche Optionen in der Tabelle "QuestionOptions". Verknüpft sind die Sätze über: Questions: QuestionID und QuestionOptions: OptionQuestionID Ich möchte jetzt per LEFT JOIN eine Abfrage machen, jeder Datensatz aus der Tabelle "Question" und alle dazugehörigen Datensätze der Tabelle "QuestionOptions" gleich darunter (nachfolgend im Array) bekomme. Also Jeden "Question" Datensatz einmal und nachfolgend im Array die dazugehörigen "QuestionOptions" (je nach vorhandener Anzahl): array(2) QUESTION => Array (2) QuestionID = 1 QuestionName = Augenfarbe QUESTIONOPTIONS = Array(3) Array(2) OptionID = 1 OptionName = Grün Array(2) OptionID = 2 OptionName = Braun Array(2) OptionID = 3 OptionName = Blau QUESTION => Array (2) QuestionID = 2 QuestionName = Haarfarbe QUESTIONOPTIONS = Array(2) Array(2) OptionID = 4 OptionName = Blond Array(2) OptionID = 5 OptionName = Braun [/PHP] Jetzt habe ich das mit folgender Abfrage probiert: [PHP] $query = "SELECT * FROM Questions LEFT JOIN QuestionOptions ON Questions.QuestionID=QuestionOptions.OptionQuestionID"; Dann bekomme ich aber für jeden Satz in den QuestionOptions auch die Daten der Questions dazu, was dann so aussehen würde: array(5) QUESTION => Array (4) QuestionID = 1 QuestionName = Augenfarbe OptionID = 1 OptionName = Grün QUESTION => Array (4) QuestionID = 1 QuestionName = Augenfarbe OptionID = 2 OptionName = Braun QUESTION => Array (4) QuestionID = 1 QuestionName = Augenfarbe OptionID = 3 OptionName = Blau QUESTION => Array (4) QuestionID = 2 QuestionName = Haarfarbe OptionID = 4 OptionName = Blond QUESTION => Array (4) QuestionID = 2 QuestionName = Haarfarbe OptionID = 5 OptionName = Braun [/PHP] Wie bekomme ich es so hin, dass die Abfrage mir den Datensatz aus der Tabelle "Questions" nur einmal und darunter mit einem neuen Array-Key alle zugehörigen Datensätze aus der Tabelle "QuestionOptions" zurückliefert (Also wie beim 1.ten Beispiel)???? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Krain Geschrieben 14. April 2006 Teilen Geschrieben 14. April 2006 Einfach über PHP den Gruppenwechsel, bzw, wechsel der Question-ID auslesen und schon hast du eine Möglichkeit zur Unterscheidung, mit SQL alleine wirst du das nicht hinbekommen. Du mußt das ResultSet einmal nachbereiten um dir dein gewünschtes Array so vorzulegen, wie du es brauchst! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
oneside Geschrieben 14. April 2006 Autor Teilen Geschrieben 14. April 2006 Wie das geht nicht direkt bei der Abfrage? Kann man nicht irgendwie sagen $query = "SELECT * FROM Questions LEFT JOIN QuestionOptions ON Questions.QuestionID=QuestionOptions.OptionQuestionID QuestionOptions GROUP BY Options"; [/PHP] oder sowas? Wenn das nicht geht, bekomme ich ja andauernd zig Daten aus der Datenbank in mein Array, die eigentlich redundant sind, da ich diese nur einmal benötige :-( Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Krain Geschrieben 14. April 2006 Teilen Geschrieben 14. April 2006 Du willst wenn ich dich richtig verstanden habe, mit deiner SQL-Abfrage als ResultSet gleich ein zweidimensionales Array erhalten, oder? Das geht nicht! Wenn du deinen GroupBy auf die QuestionID legst wirst du logischerweise immer nur einen Datensatz pro Question bekommen, legst du das GroupBy auf die OptionID wirst du genau das selbe Ergebnis erhalten, wie du es bereits vorliegen hast. Du musst in der späteren Verarbeitung des Resultsets erst die Unterscheidung vornehmen, oder die Daten einfach in ein assoziatives Array schieben und das bei jedem Satz. [B]Pseudocode[/B] Schleife über das Resulstset resArray[QuestionID][Frage] = QuestionFrage; resArray[QuestionID][Erläuterung] = QuestionErläuterung; ... tmpOption[Name] = OptionName; tmpOption[VALUE] = OptionVALUE; ... array_push(resArray[QuestionID][Options],option) Ende Schleife Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
oneside Geschrieben 14. April 2006 Autor Teilen Geschrieben 14. April 2006 ok, alles klar. Danke! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.