Hallo Leute,
ich stehe gerade auf dem Schlauch und habe mir hier mittlerweile ein Query aufgebaut bei dem ich nicht mehr durchblicke
Simples Beispiel.
Gegeben sein folgende Tabellen `service` `service_version`
Tabelle service:
Tabelle service_version
Außer 'name' und downloadURL (varchar) sind alle Columns int
Es geht hierbei um eine Datenbank die Versionsinformationen von Plugins zu einem Server hält.
Was ich nun gerade suche ist ein Select-Statement, dass mir nur eine Row pro Gruppierung aus api_major, api_minor und build für ein bestimmten Service ausgibt. Und zwar die Zeile mit dem höchsten build.
Naiv könnte man jetzt folgendes tun:
Als Ergebnis kommt dabei so etwas heraus:
Aber das Ergebnis von group by ist nicht sortiert. Group by liefert mir irgend eine Zeile für eine Gruppe - nicht notwendigerweise die mit dem höchsten build. Eher sogar das Gegenteil. Z.b. gibt es die build-Version 9 für die Gruppe mit beta == 1, api_major == 2 und api_minor == 0
Wie baut man so ein Select bei dem man nur eine bestimmte Zeile einer Gruppe bekommt? Evtl sehe ich auch den Wald vor lauter Bäumen nicht mehr...
Besten Dank und viele Grüße,
Martin
ich stehe gerade auf dem Schlauch und habe mir hier mittlerweile ein Query aufgebaut bei dem ich nicht mehr durchblicke
Simples Beispiel.
Gegeben sein folgende Tabellen `service` `service_version`
Tabelle service:
Code:
+----++-----+
| id | name |
+----++-----+
Tabelle service_version
Code:
+----++------+------+-----------+-----------+-------------+
| id | build | beta | api_major | api_minor | downloadURL |
+----++------+------+-----------+-----------+-------------+
Außer 'name' und downloadURL (varchar) sind alle Columns int
Es geht hierbei um eine Datenbank die Versionsinformationen von Plugins zu einem Server hält.
Was ich nun gerade suche ist ein Select-Statement, dass mir nur eine Row pro Gruppierung aus api_major, api_minor und build für ein bestimmten Service ausgibt. Und zwar die Zeile mit dem höchsten build.
Naiv könnte man jetzt folgendes tun:
SQL:
SELECT *
FROM
`service`
NATURAL LEFT JOIN
`service_version`
GROUP BY api_major, api_minor, beta
Als Ergebnis kommt dabei so etwas heraus:
Code:
+---------------+-------+------+-----------+-----------+
| id | name | build | beta | api_major | api_minor |
+---------------+-------+------+-----------+-----------+
| 1 | Service1 | 4 | 0 | 1 | 0 |
| 1 | Service1 | 1 | 1 | 1 | 0 |
| 1 | Service1 | 6 | 1 | 1 | 1 |
| 1 | Service1 | 8 | 1 | 2 | 0 |
+---------------+-------+------+-----------+-----------+
Aber das Ergebnis von group by ist nicht sortiert. Group by liefert mir irgend eine Zeile für eine Gruppe - nicht notwendigerweise die mit dem höchsten build. Eher sogar das Gegenteil. Z.b. gibt es die build-Version 9 für die Gruppe mit beta == 1, api_major == 2 und api_minor == 0
Wie baut man so ein Select bei dem man nur eine bestimmte Zeile einer Gruppe bekommt? Evtl sehe ich auch den Wald vor lauter Bäumen nicht mehr...
Besten Dank und viele Grüße,
Martin
Zuletzt bearbeitet: