GROUP BY sortieren? |
Ehemaliges Mitglied (#378)
Quasselstrippe Threadstarter
Beiträge: 282 |
Ihr Lieben!
Ich habe sinngemäss folgende Datenbank:
Name Wert
A 2
B 1
C 5
A 1
C 2
A 3
Ich möchte mit dem Befehl GROUP BY alle vorhandenen Namen erhalten, in der Ausgabe soll zu jedem Namen der jeweil höchste Wert angezeigt werden.
Also:
A 3
B 1
C 5
Gibt es dazu eine Möglichkeit?
Meine Vorstellung
$query = "SELECT Name, Wert FROM Datenbank GROUP BY Name ORDER BY Wert ASC";
funktioniert natürlich nicht (was ich aber erst nach einigem Nachdenken feststellte). Im Moment fällt mir aber keine Lösung dieses Problems ein. Ich möchte aber eingestehen, dass ich mit SQL und PHP erst begonnen habe.
Liebe Grüsse
Mondschatten
|
 Profil
Editieren
Zitieren
|
NetDrag
Foren-Team
Beiträge: 442 |
es gibt in SQL die Funktion max(), die dir den Höchsten Wert raussucht
in deinem Fall also
SELECT var1, max(var2) from table
oder hab ich was nicht richtig verstanden?
---
We are born wet, naked and hungry, then things got worse!
|
 Profil
Website
Editieren
Zitieren
|
Ehemaliges Mitglied (#378)
Quasselstrippe Threadstarter
Beiträge: 282 |
Lieber NetDrag,
nein, Du hast es nicht falsch verstanden... ich habe es nicht richtig beschrieben.
Dein Vorschlag löst das obige Problem perfekt. Zunächst Danke, denn die max-Funktion kannte ich bislang nicht (wieder was dazu gelernt).
Nach Ausprobieren stellte ich jedoch fest, das max(wert) nicht die Zuordnung der entsprechenden Zeile mit dem Wert beibehält. Wenn ich also beispielsweise über Name und Wert hinaus eine dritte Spalte (sagen wir: Beschreibung) habe, wird diese nicht analog zu max(Wert) mitsortiert. Das hätte ich von Anfang an sagen sollen, ich weiß.
Vielen Dank
Mondschatten
|
 Profil
Editieren
Zitieren
|
einstein
Quasselstrippe
Beiträge: 241 |
hm, das macht die Sache dann schon ein wenig komplizierter...
Entweder musst du die Beschreibung dann über eine 2. Query (gar nicht gut ;)), oder so machen wie ich das jetzt beschreib, oder es gibt eine Lösung die ich nicht kenne oder mir gerade nicht einfällt...
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28: |
$abfrage1 = "SELECT Name,Wert,Beschreibung FROM tabelle ORDER by Name,Wert";
$erg1 = mysql_db_query("$db",$abfrage1,$verbindung);
echo mysql_error();
while ($row = mysql_fetch_array($erg1))
{
if($row[1] > $wertvorher["$row[0]"])
{
$echo["$row[0]"] = "$row[0] -> $row[1] :: $row[2] ";
$wertvorher["$row[0]"] = $row[1];
}
}
mysql_free_result;
function print_array($ausgabe)
{
echo "$ausgabe";
}
array_walk($echo,"print_array");
?>
|
Das ist m.e. viel zu kompliziert für dein kleines Problem, aber mir fällt gerad nichts anderes ein...
[ Diese Nachricht wurde geändert von: einstein am 2002-07-17 20:46 ]
|
 Profil
Editieren
Zitieren
|
Ehemaliges Mitglied (#378)
Quasselstrippe Threadstarter
Beiträge: 282 |
Lieber Einstein!
Huch... Das muss ich erst einmal verdauen (sprich: zerpflücken, ausprobieren und zu begreifen versuchen). Einstweilen Danke für Deine Antwort!
Gruss
Mondschatten
Schattenzeilen
|
 Profil
Editieren
Zitieren
|
Ehemaliges Mitglied (#378)
Quasselstrippe Threadstarter
Beiträge: 282 |
Ähm...
...wenn hier jemand vorbei schaut und meint, das ginge aber auch einfacher, dann wäre ich für einen Hinweis dankbar.
(Soll heissen: Ich blicke immer noch nicht durch.)
Liebe Grüsse
Mondschatten
|
 Profil
Editieren
Zitieren
|
NetDrag
Foren-Team
Beiträge: 442 |
Bin grad nicht in der Lage. Es ist etwas zu spät um nachzudenken. Ich meld mich später
---
We are born wet, naked and hungry, then things got worse!
|
 Profil
Website
Editieren
Zitieren
|
Adrian
Quasselstrippe
Beiträge: 246 |
function print_array($ausgabe)
{
echo "$ausgabe";
}
array_walk($echo,"print_array");
besser ist print_r($dein_array);
---
schaut mal auf http://www.planetcoding-server.net vorbei
|
 Profil
E-Mail
Website
Editieren
Zitieren
|
Ehemaliges Mitglied (#378)
Quasselstrippe Threadstarter
Beiträge: 282 |
Ihr Lieben!
Habe jetzt den Hinweis bekommen, dass mir die Funktion HAVING MAX() weiterhelfen kann. In diesem Zusammenhang habe ich formuliert:
$query = "SELECT ID, title, author, description, release FROM datenbank GROUP BY author,release HAVING MAX(release) ORDER BY author, release";
Das Gute:
Diese Anfrage ergibt zumindest schonmal keine Fehlermeldung!
Das Schlechte:
Diese Anfrage ergibt stets null zutreffende Datensätze (also keine Ausgabe).
release ist übrigens ein Feld im Datumsformat - liegt es vielleicht daran?
Liebe Grüsse
Mondschatten
|
 Profil
Editieren
Zitieren
|