Wie kann man das lösen?
Vritz
- datenbank
Hallo,
Ich habe eine mysql Datenbank und möchte nun damit Games testen.
Es existieren die 3 Tabellen (Für dieses Problem)
Game 1:n Test n:1 Status
Wie gestalte ich jetzt die Abfrage so, dass _alle_ Spiele einmal angezeigt bekomme, auch wenn diese mehrere tests bzw. mehrere Staten(Statenänderungen) bekommen haben?
Also jedes Spiel nur einmal!
Danke und Gruss
Vritz mit V!
Hi,
Game 1:n Test n:1 Status
Wie gestalte ich jetzt die Abfrage so, dass _alle_ Spiele einmal angezeigt bekomme, auch wenn diese mehrere tests bzw. mehrere Staten(Statenänderungen) bekommen haben?
Also jedes Spiel nur einmal!
selektiere nur die Game-Tabelle. Wenn Du auch z.B. die Anzahl der Tests und den besten Status erhalten möchtest, verwende Gruppenfunktionen und ggf. Outer Joins.
Cheatah
Hallo
selektiere nur die Game-Tabelle. Wenn Du auch z.B. die Anzahl der Tests und den besten Status erhalten möchtest, verwende Gruppenfunktionen und ggf. Outer Joins.
Wenn ich aber nun via Checkboxen nur die Besten ausselektieren will, also WHERE Status = "Excellent", jedoch diese können einen alten Status beinhaltet, zB. der von letztes Jahr da fand ich das Spiel Status = "Traurig".
Er soll also nur den neusten Status, aller Staten anzeigen, jedoch jedes Spiel anzeigen, welches diese ausgesuchten Staten hat.
Danke und Gruss
Vritz
Hi,
selektiere nur die Game-Tabelle. Wenn Du auch z.B. die Anzahl der Tests und den besten Status erhalten möchtest, verwende Gruppenfunktionen und ggf. Outer Joins.
Wenn ich aber nun via Checkboxen nur die Besten ausselektieren will, also WHERE Status = "Excellent", jedoch diese können einen alten Status beinhaltet, zB. der von letztes Jahr da fand ich das Spiel Status = "Traurig".
Er soll also nur den neusten Status, aller Staten anzeigen, jedoch jedes Spiel anzeigen, welches diese ausgesuchten Staten hat.
verwende Gruppenfunktionen, inklusive der zugehörigen GROUP BY- und HAVING-Klauseln.
Cheatah
Hi Cheatah
verwende Gruppenfunktionen, inklusive der zugehörigen GROUP BY- und HAVING-Klauseln.
Das geht nicht, das übliche: ich hätte gerne den passenden Wert zu einem speziellen Wert aus einer Aggregatsfunktion. Dazu braucht es Subselects.
SELECT spiel, max(datum), bewertung passend zum max datum
....
HAVING bewertung = ....
scheitert daran, dass man nicht die passende Bewertung zum Datum kriegt.
Gruss Daniela
Hi,
Das geht nicht, das übliche: ich hätte gerne den passenden Wert zu einem speziellen Wert aus einer Aggregatsfunktion.
welchen "den" Wert? Wer sagt, dass es nur einen gibt?
Cheatah
Hi Cheatah
welchen "den" Wert? Wer sagt, dass es nur einen gibt?
Niemand, du hast aber keine Chance auch nur an einen passenden Wert zu kommen.
Gruss Daniela
Hi,
welchen "den" Wert? Wer sagt, dass es nur einen gibt?
Niemand, du hast aber keine Chance auch nur an einen passenden Wert zu kommen.
worauf ich hinaus wollte: Oft wird davon ausgegangen, dass es nur einen betreffenden Datensatz gibt, an den man dann erwartungsgemäß trivial rankommen müsste. Es gibt aber keine technische Grundlage für diese Beschränkung einer Gruppenfunktion. Mehr noch, das Ergebnis der Gruppenfunktion hat überhaupt keine Verbindung zu einem bestimmten Datensatz.
Allerdings sehe ich in der Fragestellung auch nicht, wo sowas gefordert wäre.
Cheatah
Hi Cheatah
worauf ich hinaus wollte: Oft wird davon ausgegangen, dass es nur einen betreffenden Datensatz gibt, an den man dann erwartungsgemäß trivial rankommen müsste. Es gibt aber keine technische Grundlage für diese Beschränkung einer Gruppenfunktion. Mehr noch, das Ergebnis der Gruppenfunktion hat überhaupt keine Verbindung zu einem bestimmten Datensatz.
Was genau das wäre, was ich an deiner Antwort bemängelt habe. Es gibt keinerlei Möglichkeit mit Group By und Having an den gewünschten Datensatz (sprich, das beste Ergebnis des neuesten Tests zu einem bestimmten Spiel zu erhalten) zu kommen.
Select spiel, max(datum), max(ergebnis)
...
group by spiel
bringt, genau, das neueste Datum und das beste Ergebnis überhaupt, unabhängig vom Datum.
Select spiel, max(datum), max(ergebnis)
...
group by spiel
having max(datum)
bring, genau, Syntaxfehler.
Die Aufgabenstellung lässt sich nur mit Subselects lösen, sie liese sich selbst dann nur so lösen, wenn Datum und Ergebnis in einer 1:1 Beziehung stünden.
Dein Tipp mit GROUP BY und HAVING war also für die Katz und geht genau von dem von dir bemängelten Szenario aus. Damit ist es _nicht_ lösbar.
Gruss Daniela
hi,
Wenn ich aber nun via Checkboxen nur die Besten ausselektieren will, also WHERE Status = "Excellent", jedoch diese können einen alten Status beinhaltet, zB. der von letztes Jahr da fand ich das Spiel Status = "Traurig".
Könntest du daraus bitte mal einen Satz machen, der in der deutschen Sprache einen Sinn ergibt?
gruß,
wahsaga