php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 14.06.2009, 21:48  
Benutzer
 
Registriert seit: 11.06.2009
Beiträge: 33
PHP-Kenntnisse:
Anfänger
schwandl befindet sich auf einem aufstrebenden Ast
Standard Bestenliste

Hallo!
Ich versuche eine Bestenliste aus Sportergebnissen zu erstellen.
Ich habe 3 Tabellen:
Namen: id, Name, Geschlecht
Bewerb: id, Ort, Jahr,
200m: id, name_id, bewerb_id, Zeit

Mit
SELECT namen, geschl, 200m, ort, jahr FROM namen, bewerbe JOIN 200m WHERE namen_id = namen.id AND bewerbe.id = bewerbe_id ORDER BY 200m
erhalte ich nun eine Liste aller Ergebnisse, ich möchte aber pro Teilnehmer nur das beste Ergebnis angezeigt bekommen. Wie schaffe ich das?

lg und danke

Geändert von schwandl (15.06.2009 um 17:28 Uhr).
schwandl ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 14.06.2009, 22:00  
Erfahrener Benutzer
 
Registriert seit: 14.08.2008
Beiträge: 157
Hexe befindet sich auf einem aufstrebenden Ast
Standard

mit MIN(Zeit) und GROUP BY
Hexe ist offline   Mit Zitat antworten
Alt 15.06.2009, 17:27  
Benutzer
 
Registriert seit: 11.06.2009
Beiträge: 33
PHP-Kenntnisse:
Anfänger
schwandl befindet sich auf einem aufstrebenden Ast
Standard

Danke, habs nun so probiert:

SELECT namen, MIN(200m), ort, jahr FROM namen, bewerbe JOIN 200m WHERE namen_id = namen.id AND bewerbe.id = bewerbe_id GROUP BY namen ORDER BY MIN(200m)

das bringt nun die gewünschte Bestenliste, allerdings stimmen Ort und Jahr nicht. Was muss ich da noch beachten?

lg und danke!
schwandl ist offline   Mit Zitat antworten
Alt 15.06.2009, 17:32  
Moderator
 
Benutzerbild von Asipak
 
Registriert seit: 18.07.2005
Beiträge: 4.072
Asipak sorgt für eine eindrucksvolle AtmosphäreAsipak sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Zitat von schwandl
[...]allerdings stimmen Ort und Jahr nicht.
Was kann man sich darunter jetzt wohl vorstellen?

Hat das Sportereignis auf einmal woanders und in einem anderen Jahr stattgefunden?
Asipak ist offline   Mit Zitat antworten
Alt 15.06.2009, 17:44  
Erfahrener Benutzer
 
Registriert seit: 14.08.2008
Beiträge: 157
Hexe befindet sich auf einem aufstrebenden Ast
Standard

Dann sollte das helfen:
http://jan.kneschke.de/projects/mysql/groupwise-max
Hexe ist offline   Mit Zitat antworten
Alt 15.06.2009, 18:52  
Benutzer
 
Registriert seit: 11.06.2009
Beiträge: 33
PHP-Kenntnisse:
Anfänger
schwandl befindet sich auf einem aufstrebenden Ast
Standard

@Asipak

Die 200m werden bei vielen Wettkämpfen gefahren und es gibt von jedem Sportler mehrere Ergebnisse an verschiedenen Orten. In der Bestenliste möchte ich nun das beste Ergebnis jedes Sportlers haben und es soll dabei stehen wo und wann es erreicht wurde.
Bei meiner Abfrage stimmen nun die Bestzeiten, allerdings passt der Ort und das Jahr nicht zu dem Ergebnis. Warum auch immer ...

@Hexe gibts das auch für dummys - soweit bin ich glaub ich noch nicht, dass ich das verstehe?

Ich habe das Ganze früher mal (mit Hilfe) in einer Access Datenbank hinbekommen, allerdings mit einer Zusatztabelle Bestzeiten, wo nur die Bestzeiten gespeichert waren:
SELECT Ergebnis.Name, Bestzeiten.[MinvonZeit 200m], Bewerbe.Bewerb, Bewerbe.Jahr, Bewerbe.Ort
FROM Bewerbe INNER JOIN (Ergebnis INNER JOIN Bestzeiten ON (Ergebnis.Name = Bestzeiten.Name) AND (Ergebnis.[Zeit 200m] = Bestzeiten.[MinvonZeit 200m])) ON Bewerbe.ID = Ergebnis.Tabelle2_ID
GROUP BY Ergebnis.Name, Bestzeiten.[MinvonZeit 200m], Bewerbe.Bewerb, Bewerbe.Jahr, Bewerbe.Ort
ORDER BY Bestzeiten.[MinvonZeit 200m];

Jetzt schaffe ich es aber nicht, das auf MySql umzusetzen.

lg

Geändert von schwandl (15.06.2009 um 19:16 Uhr).
schwandl ist offline   Mit Zitat antworten
Alt 15.06.2009, 21:25  
Erfahrener Benutzer
 
Registriert seit: 14.08.2008
Beiträge: 157
Hexe befindet sich auf einem aufstrebenden Ast
Standard

Mal von der Struktur ausgehend:
Namen: id, Name, Geschlecht
Bewerb: id, Ort, Jahr,
200m: id, name_id, bewerb_id, Zeit

So solltest du jeweils die Bestzeit zur name_id bekommen mit der korrekten bewerb_id:

SELECT t1.name_id, t1.bewerb_id, t1.Zeit FROM 200m t1,
(SELECT name_id, MIN(Zeit) as minzeit FROM 200m GROUP BY name_id) AS t2
WHERE t1.name_id = t2.name_id AND t1.Zeit = t2.minzeit

Dann statt name_id den Name ausgeben:

SELECT t3.name, t1.bewerb_id, t1.Zeit FROM 200m t1, Namen t3,
(SELECT name_id, MIN(Zeit) as minzeit FROM 200m GROUP BY name_id) AS t2
WHERE t1.name_id = t2.name_id AND t1.Zeit = t2.minzeit AND t1.name_id = t3.id

Und dann statt bewerb_id Ort und Jahr ausgeben:

SELECT t3.name, t4.Ort, t4.Jahr, t1.Zeit FROM 200m t1, Namen t3, Bewerb t4,
(SELECT name_id, MIN(Zeit) as minzeit FROM 200m GROUP BY name_id) AS t2
WHERE t1.name_id = t2.name_id AND t1.Zeit = t2.minzeit AND t1.name_id = t3.id AND t1.bewerb_id = t4.id

Wobei man Namen und Bewerb wohl besser mit INNER JOIN einbinden sollte...
Hexe ist offline   Mit Zitat antworten
Alt 15.06.2009, 22:03  
erc
Erfahrener Benutzer
 
Registriert seit: 02.01.2009
Beiträge: 730
PHP-Kenntnisse:
Fortgeschritten
erc wird schon bald berühmt werden
Standard

Zitat:
Zitat von Hexe Beitrag anzeigen
SELECT t3.name, t4.Ort, t4.Jahr, t1.Zeit FROM 200m t1, Namen t3, Bewerb t4,
(SELECT name_id, MIN(Zeit) as minzeit FROM 200m GROUP BY name_id) AS t2
WHERE t1.name_id = t2.name_id AND t1.Zeit = t2.minzeit AND t1.name_id = t3.id AND t1.bewerb_id = t4.id
Sry, mach das Spaß die Tabellennamen zu verhunzen oder was soll das?
erc ist offline   Mit Zitat antworten
Alt 15.06.2009, 23:06  
Benutzer
 
Registriert seit: 11.06.2009
Beiträge: 33
PHP-Kenntnisse:
Anfänger
schwandl befindet sich auf einem aufstrebenden Ast
Standard

Vielen Dank für deine Hilfe aber ich blicke immer noch nicht ganz durch.
Müssen die Select Anweisungen alle hintereinander, ohne irgendwas dazwischen?
Ich habe das alles in die Variable $sql gepackt aber ich erhalte nur eine Fehlermeldung.
t1 usw sind Aliase, wenn ich das richtig verstanden habe? Aber den Sinn begreife ich nicht ganz.

Sry, bin noch ziemlicher Anfänger, was mysql anbelangt aber ich möchte es unbedingt schaffen, diese Bestenliste zu erstellen bzw. es sollen dann online noch viel mehr Abfragen möglich sein, aber das wird noch ein weiter Weg ...

lg und danke!
schwandl ist offline   Mit Zitat antworten
Alt 15.06.2009, 23:11  
Erfahrener Benutzer
 
Registriert seit: 14.08.2008
Beiträge: 157
Hexe befindet sich auf einem aufstrebenden Ast
Standard

Eigentlich brauchst du nur das Letzte. Die 3 Schritte waren die Entwicklung zum besseren Verständnis. Du solltest aber mit dem 1. anfangen und erst wenn das passt, dann nimmst du das 2. und letztendlich das 3.

Und poste die Fehlermeldung mit (mysql_error einbauen).
Hexe ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
MySql/PHP - Kleinster Wert aus einer Spalte IHOIU67 Datenbanken 18 17.05.2009 15:44

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php bestenliste, mysql bestenliste, bestenliste namen, access bestenliste erstellen, namen bestenliste, bestenliste php, bestenliste erstellen php, access bestenliste abfrage, access bestenliste, php mysql bestenliste, zeiten bestenliste erstellen, sport bestenliste php mysql, bestenliste mysql php, mysql bestenliste erstellen, bestenliste php mysql, accsess bestenliste, namen bestliste, mysql bestenliste php, bestenliste.php, bestenliste mit php

Alle Zeitangaben in WEZ +2. Es ist jetzt 08:08 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum