0 0 Stimmen

MySQL: Abfrage und Änderung von Daten über 2 Tabellen in einer Abfrage möglich?

Frage von Gast | 05.12.2016 um 22:08 Uhr

Folgende Daten sind vorhanden:

mysql> select * from PlatzGr1;
+----+------------------------+-----+------+------+-------+-------+
| id | spieler                | win | lost | legs | avg   | platz |
+----+------------------------+-----+------+------+-------+-------+
| 1  | HE1804: Mike Weidelt   | 4   | 0    | 8:0  | 44.00 | 1     |
| 2  | HE973: Renate Lauer    | 2   | 2    | 4:4  | 44.00 | 2     |
| 3  | HE471: Frank Schneider | 2   | 2    | 4:4  | 44.00 | 3     |
| 4  | HE1627: Holger Boller  | 1   | 3    | 2:6  | 44.00 | 4     |
| 5  | HE1726: Thomas Dombach | 1   | 3    | 2:6  | 44.00 | 5     |
+----+------------------------+-----+------+------+-------+-------+
5 rows in set (0,00 sec)
mysql> select * from Paarungen1;
+----+------------------------+------------------------+--------+--------+--------+--------+
| id | spieler1               | spieler2               | sperg1 | sperg2 | sp1avg | sp2avg |
+----+------------------------+------------------------+--------+--------+--------+--------+
| 1  | HE1804: Mike Weidelt   | HE973: Renate Lauer    | 2      | 0      | 55.00  | 55.00  |
| 2  | HE1627: Holger Boller  | HE1726: Thomas Dombach | 0      | 2      | 55.00  | 55.00  |
| 3  | HE973: Renate Lauer    | HE1726: Thomas Dombach | 2      | 0      | 55.00  | 55.00  |
| 4  | HE471: Frank Schneider | HE1627: Holger Boller  | 0      | 2      | 55.00  | 55.00  |
| 5  | HE1804: Mike Weidelt   | HE1726: Thomas Dombach | 2      | 0      | 55.00  | 55.00  |
| 6  | HE973: Renate Lauer    | HE471: Frank Schneider | 0      | 2      | 55.00  | 55.00  |
| 7  | HE1804: Mike Weidelt   | HE1627: Holger Boller  | 2      | 0      | 55.00  | 55.00  |
| 8  | HE1726: Thomas Dombach | HE471: Frank Schneider | 0      | 2      | 55.00  | 55.00  |
| 9  | HE1804: Mike Weidelt   | HE471: Frank Schneider | 2      | 0      | 55.00  | 55.00  |
| 10 | HE1627: Holger Boller  | HE973: Renate Lauer    | 0      | 2      | 55.00  | 55.00  |
+----+------------------------+------------------------+--------+--------+--------+--------+
10 rows in set (0,00 sec) 

Ich suche nach einer Lösung, wie ich herausfinde, welche Spieler in der Tabelle PlatzGr1 die gleichen Werte in der Spalte legs haben und dann über die Tabelle Paarungen1 die entsprechende Paarung finde um festzustellen, wer faktisch im direkten Vergleich gewonnen hat um dann in PlatzGr1 die Platzierung anzupassen ...

Kann mir da bitte jemand helfen, da ich Datenbank Anfänger bin und mir da wirklich schwer tue.

Auf folgendes bin ich schon gekommen (ok - habs im Netz gefunden) ...

mysql> select * from PlatzGr1 where legs in (select legs from PlatzGr1 group by legs having count(1) > 1);
+----+------------------------+-----+------+------+-------+-------+
| id | spieler                | win | lost | legs | avg   | platz |
+----+------------------------+-----+------+------+-------+-------+
| 2  | HE973: Renate Lauer    | 2   | 2    | 4:4  | 44.00 | 2     |
| 3  | HE471: Frank Schneider | 2   | 2    | 4:4  | 44.00 | 3     |
| 4  | HE1627: Holger Boller  | 1   | 3    | 2:6  | 44.00 | 4     |
| 5  | HE1726: Thomas Dombach | 1   | 3    | 2:6  | 44.00 | 5     |
+----+------------------------+-----+------+------+-------+-------+
4 rows in set (0,00 sec)

Jetzt möchte ich praktisch rausfinden, wer von den ersten Beiden gewonnen hat und wer von den zweiten Beiden ... entsprechend dann die Platzierung ändern wenn notwendig ...

In diesem Falle wäre es eben notwendig id 3 platz auf 2 zu setzen und id 5 platz auf 4 - im gegenzug natürlich dann id 2 platz auf 3 und id 4 platz auf 5 ...

Geht das überhaupt so wie ich mir das denke in einem Rutsch?

Lieben Dank an jeden der sich damit beschäftigt und mir versucht zu helfen

LG

AntwortenPositivNegativDatumStimmen

NetLabel

Profil anzeigen | Nachricht
Avatar
00 Stimmen

Vielleicht so etwas in der Art?

SELECT spieler, (SUM(s1.sperg1) + SUM(s1.sperg2)) as sp
FROM PlatzGr1 s

LEFT JOIN Paarungen1 s1 ON s.spieler = s1.spieler1
LEFT JOIN Paarungen1 s2 ON s.spieler = s2.spieler2

ORDER BY s.legs, sp

Stehen die Spieler eigentlich wirklich so in der Tabelle? Es wäre viel besser eine Tabelle "spieler" zu machen und dann nur noch die ID des Spielers in die andere Tabelle einzutragen. Gibt es denn noch andere Tabellen?
05.12.2016 um 23:09 Uhr

AntwortenPositiv Negativ
00 Stimmen

Lieben Dank für Deine Antwort.

Allerdings weiß ich jetzt nicht, was mir dann die Ausgabe sagen soll ... damit komm ich nicht weiter .... Leider.

Ja, ich weiß, ich müsste das umbauen und mit ID's arbeiten, aber das war mit heißer Nadel gestrickt und muss erstmal so laufen bevor ich mir dann die Zeit nehmen kann das umzubauen ... Leider nicht anders möglich im Moment.
05.12.2016 um 23:56 Uhr

Positiv Negativ

NetLabel

Profil anzeigen | Nachricht
Avatar
00 Stimmen

Naja, die Ausgabe soll dir die Spieler zuerst nach "legs" sortieren und bei gleichen Werten nach sp (kommt aus den Paarungen). Das macht man mit ORDER BY <kriterium1>, <kriterium2>. Das wolltest du doch, oder?

Ein kleiner Tipp: Mach es lieber gleich vernünftig, als es zuerst irgendwie zum laufen zu bringen. Sonst ist es hinteher ein vielfaches der Arbeit...
06.12.2016 um 03:51 Uhr

Positiv Negativ
00 Stimmen

Als Ausgabe brauche ich praktisch folgendes:

Spieler1 und Spieler2 haben das gleiche Legverhältnis

Die Abfrage muss mir dann praktisch ermitteln wer von beiden gewonnen hat und dann am liebsten gleich noch platz entsprechend ändern ...

Eigentlich brauche ich noch nicht mal eine Ausgabe, sofern das 100%ig sicher arbeitet, da die Ausgabe dann an ganz anderer Stelle erledigt wird und der Schritt optisch unwichtig ist. Das Ergebnis ist wichtig - also dass das passiert was ich gerade versuchte zu erklären.

Ich habe es mit viel Aufwand und auch nicht sauber via Programmierung erledigt, bin aber ziemlich sicher, dass es dafür eine pure MySQL Lösung geben müsste
06.12.2016 um 15:59 Uhr

AntwortenPositiv Negativ

Anja Proggy

Profil anzeigen | Nachricht
Avatar
00 Stimmen

Wie sieht denn diese Programmierung aus, die du bisher gemacht hast?

Vielleicht solltest du uns das nicht vorenthalten wenn du Hilfe brauchst. Und was gibt es sonst noch für Tabellen in der Datenbank?
06.12.2016 um 16:24 Uhr

Positiv Negativ
00 Stimmen

Weder die anderen Tabellen der DB noch die Programmierung spielen eine Rolle bei der Fragestellung.

Es geht um diese beide Tabellen und eine pure reine MySQL Lösung die gesucht ist.

Wie es anders machbar ist ist ja nicht der Kern der Frage...
06.12.2016 um 16:27 Uhr

Positiv Negativ

Anja Proggy

Profil anzeigen | Nachricht
Avatar
00 Stimmen

Wenn das so ist möchte ich darauf hinweisen dass hier Leute unentgeltlich in ihrer Freizeit ihre Zeit dafür opfern, Aufgaben zu übernehmen, mit denen normalerweiser Programmierer ihren Lebensunterhalt verdienen.

Beauftrage bitte einen Programmierer mit dieser Aufgabe, wie das ehrliche Leute tun würden! Ich antworte hier nicht mehr!
06.12.2016 um 18:19 Uhr

Positiv Negativ

Progger99

Profil anzeigen | Nachricht
Avatar
00 Stimmen

Ich würde als nicht ganz so drastisch sehen wie Anja, trotzdem muss ich ihr aber in den meisten Punkten Recht geben.

Wenn du Ratschläge ignorierst und keine Hintergrundinformationen gibst, kann dir leider niemand helfen. So ein Forum ist dafür da, dass man Fragen beantwortet, die auch anderen Nutzern oder Programmieranfängern helfen. Nicht aber dafür, ein vermurkstes Projekt wiederzubeleben und mit der Brechstange zum laufen zu bringen.

Mit dem richtigen Tabellendesign würde sich eine gewünschte Ausgabe nahezu automatisch ergeben. Wenn du aber zusammengehörige Informationen über verschiedene Tabellen verteilst und es nicht besser machen willst, weiß ich ehrlich gesagt nicht, wie man da noch helfen soll.
07.12.2016 um 15:12 Uhr

Positiv Negativ
Antworten

Ähnliche Themen

Wichtiger Hinweis

Die Beiträge auf askingbox.de sind Beiträge von Nutzern und sollen keine professionelle Beratung ersetzen. Sie werden nicht von Unabhängigen geprüft und spiegeln nicht zwingend die Meinung von askingbox.de wieder. Mehr erfahren.

Jetzt mitmachen

Stellen Sie Ihre eigene Frage oder schreiben Sie Ihren eigenen Artikel auf askingbox.de. So gehts.