Fred Furunkelstein 2012: PHP-Sortierbefehl für MySQL-Tabelle

Beitrag lesen

Krauter-Datenbanksystem

... das immerhin zu Oracle gehört und in dessen Datenbankengine SAP einiges gewiss nicht uneigennützig eingebracht hat. Welches dieser beiden Unternehmen möchtest Du als "Krauter" bezeichnen?

SELECT zahl, ABS( zahl ) AS reihe  
FROM zahlen  
ORDER BY reihe DESC  
LIMIT 1 

würde mit dem angegebenen Beispiel [1,0,-10] die 10 als absoluten Betrag bringen

SELECT `zahl`, ABS( `zahl` ) AS `reihe`  
FROM `zahlen`  
ORDER BY `reihe` DESC  
LIMIT 1 

Bringt das, was der Frager wohl erwartet.

zahl reihe
-10 10

WICHTIGE Hinweise:

1. Voraussetzung ist, dass die Tabelle auch Zahlen und keinen Text enthält. Das NULL enthalten sein können soll erweckt bei einen ganz argen Verdacht.
2. Es muss bei jeder Abfrage die gesamte Tabelle durchgerechnet und das Ergebnis sortiert werden - hier sollte schon beim Eintragen der Werte die Berechnung durchgeführt werden damit auch die Spalte 'reihe' indexiert werden kann. Sonst dauert das Abfragen möglicherweise sehr lang.

Mit
1. ALTER TABLE zahlenADDreiheDECIMAL( 10.4 ) NOT NULL
2. ALTER TABLE zahlenADD INDEX (reihe )
3. UPDATE zahlenSETreihe=ABS( zahl )

kann man das auch nachträglich machen.

Dann muss man nur ein

SELECT `zahl`  
FROM `zahlen`  
ORDER BY `reihe` DESC  
LIMIT 1 

abfragen um das wohl erwünschte Ergebnis -10 zu erhalten.