samsx87
Goto Top

PHP - Maximaler wert aus Datenbank auslesen

Hallo Zusammen

Habe wieder einmal ein Problem mit mysql & php.
Ich habe eine mysql Datenbank mit verschiedenen spalten (Test, Name, Stadt, Anzahl). Ich möchte nun die Zeile auslesen, bei welcher der Wert in der Spalte "Anzahl" am höchsten ist (z.B 71).

Habe das ganze mit MAX(Anzahl) probiert und das funzt nicht, auch das sortieren nach der spalte "Anzahl" und danach die ausgabe der höchste Zahl klappt nicht (bekomme jeweils immer die Zeile mit der "Anzahl" 9).

Kann mir jemand helfen?

Danke!

Content-Key: 77274

Url: https://administrator.de/contentid/77274

Printed on: April 19, 2024 at 20:04 o'clock

Member: Biber
Biber Jan 05, 2008 at 01:05:56 (UTC)
Goto Top
Moin samsx87,

das Statement könnte z.B. so aussehen:
Select Test, Name, Stadt, Anzahl From SamsTabelle
Where Anzahl=Select Max(x.Anzahl) from SamsTabelle x
select * from SamsTabelle order by anzahl desc LIMIT 1

-oder, wenn Du nur den MaxWert selbst brauchst-
select anzahl from SamsTabelle order by anzahl desc LIMIT 1
Select Max(Anzahl) from SamsTabelle

Grüße
Biber
Member: Dani
Dani Jan 05, 2008 at 09:27:27 (UTC)
Goto Top
Moin,
ich möchte noch etwas zu Biber's Statmenet hinzufügen:
Vorraussetzung ist, dass das Attribut (Spalte) Anzahl als Typ ein Zahl hat. Das kann sein int, smallint, double, etc... falls du dort Text stehen hast, kann das nicht gehen!


Grüße
Dani
Member: Biber
Biber Jan 05, 2008 at 10:04:42 (UTC)
Goto Top
Moin Dani,

das würde in der Tat erklären, warum der Datensatz mit der "Anzahl" 9 zurückkommt. *g

Falls also ein ### das Feld "Anzahl" als Varchar oder so etwas angelegt haben sollte, dann muss entsprechend geCASTed werden. Beispiel:
select * from SamsTabelle order by CAST(anzahl AS UNSIGNED) desc LIMIT 1
Aber das wollen wir Samsx87 ja nicht unterstellen....

Ach, eine Anmerkung noch zu meinen beiden Statements aus dem Vor-Kommentar.
Bei der Abfrage über ..MAX().. können natürlich auch mehrere Datensätze im Resultset sein.
Bei "...LIMIT 1" kommt immer nur einer. Beides kann gewollt sein bzw. gebraucht werden --> entsprechend eine Variante wählen.

Grüße
Biber
Member: Dani
Dani Jan 05, 2008 at 10:29:31 (UTC)
Goto Top
Moin Biber,
macht hier ein CASTing schon Sinn? Denn die Anzahl kann eigentlich nur eine Zahl sein, oder? Somit wäre es doch sinnvoller, den Typ der Spalte zu ändern als immer ein SELECT (sieh dein Beispiel) auszuführen...macht das Statment zwar nicht dick, aber die Fehlermöglichkeiten werden verkleinert bzw.
Ich verfolge das Ziel: Das Statment so kurz und einfach wie möglich zu haben aber das Ziel 100%ig zu erreichen. Damit ich auch in 10 Jahren noch weiß, was da passiert. face-smile


Grüße
Dani
Member: samsx87
samsx87 Jan 05, 2008 at 10:52:47 (UTC)
Goto Top
Hallo Zusammen

Habe ich bereits Probiert:
select * from SamsTabelle order by anzahl desc LIMIT 1

ABER ich habe den Fehler gefunden: Das Feld ist als "VARCHAR" definiert *duckundgweg* - Ich bekenne mich also als Schuldig face-wink

Kann mir jemand einen Link geben, wo die Unterschiede/Eigenschaften der verschiedenen Typen Beschrieben sind? (Damit so ein Fehler nie wider vor kommt!)

Naja wie auch immer: jetzt Funktionierts face-wink. Ich Danke euch 1000 mal für eure schnelle Hilfe, Ihr seit meine Helden :P
Member: Dani
Dani Jan 05, 2008 at 10:58:58 (UTC)
Goto Top
Hi,
na gut...weil heute Wochenende ist und ich gut drauf bin. face-wink
Hier findest du alle Datentypen, die es unter MySQL gibt + Erklärung. Suchbegriff war bei Google "mysql typen"


Schönes Wochenende
Dani