php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 02.06.2011, 01:36  
Neuer Benutzer
 
Registriert seit: 02.06.2011
Beiträge: 2
PHP-Kenntnisse:
Anfänger
mrburns befindet sich auf einem aufstrebenden Ast
Standard Höchsten Wert zweier Tabellen

Hallo

Ich habe ein Tabelle eingabetabelle mit rasternummer und Name
und eine Tabelle Ergebnisse mit rasternummer und gd(float).

Über rasternummer sind die Felder der 2 Tabellen zueinander zugeordnet.

Ich möchte die Felder Name und gd ausgeben nach gd absteigend sortiert.

das habe ich folgendermaßen gemacht:

$abfrage = "SELECT name, gd, eingabetabelle.rasternummer
FROM ergebnisse, eingabetabelle
WHERE ergebnisse.rasternummer = eingabetabelle.rasternummer order by gd desc";

Das Ergebnis sieht so aus:

name: ___ gd:
Name4 ___ 12,054
Name2 ___ 9,325
Name9 ___ 6,995
Name4 ___ 5,843
Name3 ___ 3,765

Jetzt würde ich aber nur den Namen mit dem jeweils höchsten gd ausgeben lassen und die anderen gleichen Namen weglassen.
In diesem Beispiel sollte also der zweite Name4 nicht mehr aufscheinen.

Gibt es da eine Möglichkeit?
Habe schon mit max herumexperimentiert, aber nicht geschafft.

Vielen Dank im Voraus
mfg
mrburns
mrburns ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 02.06.2011, 19:14  
Erfahrener Benutzer
 
Benutzerbild von Dark Guardian
 
Registriert seit: 10.10.2009
Beiträge: 2.627
PHP-Kenntnisse:
Fortgeschritten
Dark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekannt
Standard

Erstmal solltest du einen Join benutzen und nicht so ein Where-Konstrukt. MySQL optimiert das intern zwar auf einen Join, aber dennoch ist folgendes korrekt:

Code:
SELECT e.name, e.gd, et.rasternummer
FROM ergebnisse e
INNER JOIN eingabetabelle et
ON e.rasternummer = et.rasternummer
ORDER BY gd DESC
Zitat:
Habe schon mit max herumexperimentiert, aber nicht geschafft.
Das heißt konkret was? MAX() ist nämlich nur die halbe Problemlösung. Schau dir mal GROUP BY an.
__________________
"Alles im Universum funktioniert, wenn du nur weißt wie du es anwenden musst".
Dark Guardian ist offline   Mit Zitat antworten
Alt 03.06.2011, 08:09  
Neuer Benutzer
 
Registriert seit: 02.06.2011
Beiträge: 2
PHP-Kenntnisse:
Anfänger
mrburns befindet sich auf einem aufstrebenden Ast
Standard

Hallo nochmal

Danke für den Tip.

Habe jetzt folgendes gemacht:

SELECT e.name, MAX(e.gd), et.rasternummer
FROM ergebnisse e
INNER JOIN eingabetabelle et
ON e.rasternummer = et.rasternummer GROUP BY name
ORDER BY gd DESC

Das funktioniert jetzt fast.
Die überzähligen Namen werden weggelassen und nach gd absteigend sortiert.

ABER, überall dort, wo ein Name einen niedrigeren gd auch hätte, wird der Name zwar mit dem richtigen gd aber an der falschen Stelle(nämlich dort, wo er mit dem niedrigeren wäre) eingeordnet.

z.B.

Name5_____6,745
Name9_____5,334
Name4_____4,678
Name6_____5,889
Name1_____2,321

Der Name6 steht deswegen dort, weil er auch noch einen gd von z.b. 4,2 hat(irgendetwas zwischen 4,678 und 2,321) und wird zwar mit dem MAX_Wert angezeigt, aber zwischen den anderen Namen(aufgrund seines niedrigeren gd) eingeordnet.

Ich müsste folgendes schaffen:
zuerst order by und dann group by.
dann würde es zuerst alles nach gd sortieren und dann durch group by erst die überzähligen namen weglassen.

Diese Reihenfolge geht aber nicht:
ORDER BY gd DESC GROUP BY name =>
Warning: Supplied argument is not a valid MySQL result resource in ... kommt dann raus.

Gibt es doch eine Möglichkeit, oder einen anderen Weg?

Vielen Dank
mrburns ist offline   Mit Zitat antworten
Alt 03.06.2011, 09:21  
Erfahrener Benutzer
 
Benutzerbild von mermshaus
 
Registriert seit: 14.06.2009
Beiträge: 1.723
PHP-Kenntnisse:
Fortgeschritten
mermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz sein
Standard

Vielleicht einfach so:

Code:
SELECT e.name, MAX(e.gd) AS max_gd, et.rasternummer
FROM ergebnisse e
INNER JOIN eingabetabelle et
ON e.rasternummer = et.rasternummer
GROUP BY name
ORDER BY max_gd DESC
Edit: Die Schemabeschreibung in #1 passt übrigens nicht zum SQL-Code.
__________________
Blog | Buch | Kaloa

Geändert von mermshaus (03.06.2011 um 09:37 Uhr).
mermshaus ist offline   Mit Zitat antworten
Alt 03.06.2011, 11:22  
Erfahrener Benutzer
 
Benutzerbild von Dark Guardian
 
Registriert seit: 10.10.2009
Beiträge: 2.627
PHP-Kenntnisse:
Fortgeschritten
Dark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekannt
Standard

GROUP BY zieht deine Zeilen zu Gruppen zusammen, wie du ja anhand des Namens merkst. GROUP BY weiss aber nicht welchen Wert der übrigen Spalten (gd) für die Gruppe verwendet werden soll.

Code:
Name4    0.12345
Name4    1.4567
Wenn du das nun nach Name4 gruppierst, woher soll das DBMS wissen welchen Wert es für gd nehmen soll? Dementsprechend scheitert deine Sortierung.

Wenn du dir zu MAX(e.gd) noch e.gd ausgeben lässt dann siehst du das Problem.

Wenn du das ganze nach dem ermittelten MAX() Wert sortiert haben willst, warum sortierst du dann nicht danach sondern nach e.gd?
__________________
"Alles im Universum funktioniert, wenn du nur weißt wie du es anwenden musst".
Dark Guardian ist offline   Mit Zitat antworten
Alt 06.06.2011, 10:54  
Erfahrener Benutzer
 
Registriert seit: 01.06.2008
Beiträge: 179
PHP-Kenntnisse:
Fortgeschritten
Daniel befindet sich auf einem aufstrebenden Ast
Daniel eine Nachricht über ICQ schicken
Standard

Benenne dein MAX-Ergebnis einfach noch beliebig und sortiere danach:

Code:
SELECT e.name, MAX(e.gd) AS MaxGD, et.rasternummer
FROM ergebnisse e
INNER JOIN eingabetabelle et
ON e.rasternummer = et.rasternummer GROUP BY name
ORDER BY MaxGD DESC
Daniel 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
Probleme beim Abfragen zweier Tabellen... Lapje Datenbanken 3 07.04.2011 22:50
[Erledigt] Suche zwischen 2 Tabellen larabad PHP Einsteiger 11 30.03.2011 11:59
Daten aus 2 Tabellen ausgeben und sortieren moprhoyz Datenbanken 1 06.03.2011 22:29
Urlaubsverwaltung: zirkuläre Abhängigkeit zweier Tabellen Chriz Datenbanken 4 01.02.2011 18:08
Höchsten Wert eines Hidden-Feldes auslesen djlars PHP Einsteiger 4 03.01.2011 16:14
[Erledigt] php tabelle - probleme (spaltennamen) dior PHP Tipps 2010 5 11.11.2010 11:59
[Erledigt] 2 Tabellen abgleichen und Inhalte übernehmen... Abweichler PHP Tipps 2010 3 29.07.2010 20:23
MySQL: Verknüpfung zweier Tabellen (Heimteamname und Auswärtsteam aus Teamtabelle) erikjo PHP Tipps 2010 14 29.07.2010 16:19
[Erledigt] nur kleinstem wert einer person anzeigen mittels MIN? kamikaze Datenbanken 4 13.07.2010 22:07
[Erledigt] jeden 5ten Wert aus db löschen Crowz PHP Tipps 2009 22 14.01.2010 16:07
Verknüpfung zweier Tabellen zur Ausgabe klappt nicht Lesnivila PHP Tipps 2009 40 13.03.2009 13:20
Lange Laufzeit beim abgelich zweier Tabellen ignatzimmergrün PHP Tipps 2009 7 02.03.2009 17:39
MySql Abfrage aus mehreren Tabellen an eine Tabelle begrenzen. matze123456 Datenbanken 6 20.02.2009 23:43
Strukturierung/Verknüpfung zweier Tabellen und der entsprechenden Klassen nerere PHP-Fortgeschrittene 4 17.11.2008 16:30
Datensatz mit höchsten Wert aus verknüpfter Tabelle ausgeben db Datenbanken 2 26.04.2006 11:48

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
mysql inner join höchster wert, mysql, inner join mit order, höchsten wert, höchste werte aus mehreren tabellen, select max zwei tabellen, sql höchster wert von zwei tabellen, join höchster wert, max über 2 tabellen, mysql maximalen wert aus mehreren tabellen, order by höchster wert, höchsten wert mysql mehrere tabellen, max funktion in abfrage zweier tabellen, group by order by falsche werte, mysql join mit höchstem wert

Alle Zeitangaben in WEZ +2. Es ist jetzt 11:50 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