mySQL: 1241: Operand should contain 1 column(s)
bearbeitet von Rolf BHallo Linuchs,
deine Query ist ohnehin total verquast und dürfte etliche "undefined" Komponenten enthalten.
- Du mischst eine Aggregatspalte mit einer Nichtaggregatspalte
- Du referenzierst im Subselect die Spalte adr1.id - auf welche ID soll sich das denn bitte schön beziehen, wenn Du im SELECT eine MAX-Bestimmung machst? Oder steckt im FROM eine Abfrage `adr1.id = $someId`, so dass die adr1.id für alle Sätze gleich ist?
Meine Empfehlung wäre, zwei Querys zu machen.
Zunächst diese:
~~~sql
SELECT trm1.zeit_neu, trm1.id, adr1.id
FROM table1 trm1 JOIN table2 adr1 ON ...
WHERE ...
ORDER BY trm1.zeit_neu desc
LIMIT 1
~~~
Ich hab da jetzt irgendeinen JOIN hingeschrieben, das ist nur symbolisch und sieht in deiner Realität sicherlich anders aus.
Damit bekommst Du den MAX-Wert für zeit_neu und die trm1.id dazu, auf definierte Weise. Ob Du die adr1.id auch selektieren musst, hängt von Kontext ab den ich nicht kenne - ich hab sie mal reingeschrieben für den Fall, dass es mehrere adr1.id geben könnte.
Im zweiten Schritt machst Du dann den Zufalls-Select.
Das sind zwar zwei Queries, aber man muss nicht alles in einer Query zusammenpressen. Wenn dein SQL Server auf localhost läuft, ist die Abfragelatenz miminal. Wenn er auf einem anderen Server läuft, hast Du ein paar Millisekunden Latenz drin, aber bei einem stark belasteten System wird diese Latenz für die Ausführung anderer Requests genutzt, d.h. der Serverdurchsatz verringert sich nicht. Nur die Antwortzeit für einen einzelnen User, um ein kleines Bisschen. Das ist nicht schlimm. Aus Serversicht geht es Dir um die Optimierung des Durchsatzes, nicht unbedingt um schnellste Antwortzeit für einzelne User.
_Rolf_
--
sumpsi - posui - obstruxi
mySQL: 1241: Operand should contain 1 column(s)
bearbeitet von Rolf BHallo Linuchs,
deine Query ist ohnehin total verquast und dürfte etliche "undefined" Komponenten enthalten.
- Du mischst eine Aggregatspalte mit einer Nichtaggregatspalte
- Du referenzierst im Subselect die Spalte adr1.id - auf welche ID soll sich das denn bitte schön beziehen, wenn Du im SELECT eine MAX-Bestimmung machst? Oder steckt im FROM eine Abfrage `adr1.id = $someId`, so dass die adr1.id für alle Sätze gleich ist?
Meine Empfehlung wäre, zwei Querys zu machen.
(1)
~~~sql
SELECT trm1.zeit_neu, trm1.id, adr1.id
FROM table1 trm1 JOIN table2 adr1 ON ...
WHERE ...
ORDER BY trm1.zeit_neu desc
LIMIT 1
~~~
Ich hab da jetzt irgendeinen JOIN hingeschrieben, das ist nur symbolisch und sieht in deiner Realität sicherlich anders aus.
Damit bekommst Du den MAX-Wert für zeit_neu und die trm1.id dazu, auf definierte Weise. Ob Du die adr1.id auch selektieren musst, hängt von Kontext ab den ich nicht kenne - ich hab sie mal reingeschrieben für den Fall, dass es mehrere adr1.id geben könnte.
Im zweiten Schritt machst Du dann den Zufalls-Select.
Das sind zwar zwei Queries, aber man muss nicht alles in einer Query zusammenpressen. Wenn dein SQL Server auf localhost läuft, ist die Abfragelatenz miminal. Wenn er auf einem anderen Server läuft, hast Du ein paar Millisekunden Latenz drin, aber bei einem stark belasteten System wird diese Latenz für die Ausführung anderer Requests genutzt, d.h. der Serverdurchsatz verringert sich nicht. Nur die Antwortzeit für einen einzelnen User, um ein kleines Bisschen. Das ist nicht schlimm. Aus Serversicht geht es Dir um die Optimierung des Durchsatzes, nicht unbedingt um schnellste Antwortzeit für einzelne User.
_Rolf_
--
sumpsi - posui - obstruxi