MySQL mysql subqueries

Split1989

hh-student.de
ID: 238425
L
9 April 2007
1.223
85
hallo leute,

habe ein kleines problem mit einer Abfrage.

Erstmal was zum Hintergrund des Projekts: Es geht um die Auswertung von Umfragen. Ich kann leider nichts an dem Datenbankdesign ändern sonst wäre es wohl auch nicht so kompliziert.

Folgende Tabellen sind Vorhanden:
run_answerclick
ID|RUN|ANSWER|QUESTION|SELECTED|...
1|1|12|10|Y|...
2|1|12|10|N|...
3|1|13|10|Y|...
4|1|22|11|Y|...
5|1|23|11|Y|...
6|1|15|10|Y|...

interpretieren kann man diese Tabelle so
RUN 1 / QUESTION 11:
Antwort 12 Slected
Antwort 12 Deselected
Antwort 13 Selected
Antwort 15 Selected

RUN 1 / QUESTION 10:
Antwort 22 Slected
Antwort 23 Slected


answers
ID|QUESTION|TEXT|...
12|10|Antwort 1|...
13|10|Antwort 2|...
14|10|Antwort 3|...
15|10|Antwort 4|...
22|11|Antwort 1|...
23|11|Antwort 2|...
24|11|Antwort 3|...
25|11|Antwort 4|...

Als Ergebnis möchte ich jetzt gerne wissen welche Antworten für eine Bestimme Frage bei Einem Bestimmtem Run zum Ende angeklickt sind und welche nicht.

Ergebnis
ANSWER|QUESTION|SELECTED|...
12|10|N|...
13|10|Y|...
14|10|N|...
15|10|Y|...
22|11|Y|...
23|11|Y|...
24|11|N|...
25|11|N|...

Mein Problem dabei ist das ich jeweils nur den "letzten stand" für eine antwort haben möchte.
außerdem möchte ich auch das nicht angeklickte antworten (14,24,25) mit in die Tabelle aufgenommen werden und mit einem "N" bei SELECTED versehen werden. Diese Abfrage Dauert bei mir über 2 sec. liegt wohl an den ganzen Subqueries. Habt ihr da einen Tipp wie ich sie effizienter gestalten kann?

Mein Ansatz:

Code:
SELECT ID, question, 
(
SELECT selected FROM mlj_run_answerclick WHERE ID IN 
  ( 
            SELECT MAX(ID) as ID FROM `run_answerclick` as r_a WHERE r_a.run = 1 and r_a.answer = t_a.ID     GROUP BY run,answer 
   )
) as SELECTED

FROM `answer` as t_a WHERE t_a.`question` in (10,11)

Schöne Grüße
Splitiii
 
Welches Datenvolumen haben diese Tabellen, welche Indices sind angelegt ?

Das
GROUP BY run,answer
kannst Du übrigens weglassen.
 
Naja also die äußere Subquery kannst du einfach mit einem gewöhnlichen Join auflösen. Müsste dann etwa so aussehen:
SELECT x,y,z FROM run_answerclick r JOIN answers a ON r.ANSWER = a.ANSWER AND r.QUESTION = a.QUESTION

für die innere Subquery fällt mir jetzt aufs erste auch keine bessere Lösung ein. Kommt ein Select immer vor einem Deselect? Weil evtl. ist es dann schneller, die Y und N zu zählen, statt den mit der Max-ID zu suchen.