Clanintern Clanintern Clanintern

Forum

Öffentliche Foren
FORUM: Spiele & Computer THEMA: [SQL] ORDER ohne Vorzeichen
AUTOR BEITRAG
Ynusis

RANG Deckschrubber

#1 - 17.03 22:33

Ich habe eine Tabelle tab:

code:

tab

id | in | out | value

1  | 1  | 0   | 10
2  | 0  | 5   | 22
3  | 2  | 0   | 34
4  | 1  | 0   | 21


Ich will die Tabelle jetzt sortieren. Jedoch soll für alle `in` > 0 gelten, dass value *(-1) genommen wird. Also diese Werte:

code:

tmp

id | value

1  | -10
2  | +22
3  | -34
4  | -21


Geh das ohne den Umweg einer temporären Tabelle ?
horst

RANG Prophet of Clanintern

#2 - 17.03 22:55

Nur zum Verständnis: Wonach soll die Tabelle sortiert werden?
deluxe *chemized*

RANG Master of Clanintern

#3 - 17.03 23:07

Um die Werte ggf. umzukehren:
code:
SELECT `id`, IF(`in`>0, `value`*-1, `value`) AS `value` FROM `tab`

(untested)
*al!ve* - Vorbereitung aufs Urlaubssemester

RANG Master of Clanintern

#4 - 17.03 23:30

code:
SELECT id, (value*value) AS square FROM tab ORDER BY square

Auch ungetestet. Sollte mit IF zwar auch gehen, aber ich glaub mal gelesen zu haben, dass das IF einen recht große Mehraufwand erzeugt.
h¥pertex

RANG Deckschrubber

#5 - 18.03 09:30

Hat aber doch nicht viel mit der Problemstellung zu tun, oder?
vaest´ark // patrick *circle of confusion*

RANG Master of Clanintern

#6 - 18.03 11:34

leute, leute....

dev.mysql.com/doc/refman/5.0/en/mathematical-functions.html#function_abs
deluxe *chemized*

RANG Master of Clanintern

#7 - 18.03 11:43

Ich versteh gerade weder die antwort von Pat noch von Stephan^^
Oder ihr beiden versteht die Problemstellung nit (oder ich versteh sie nit^^)

Laut der Tabelle da oben sind die Values überwiegend positiv und er will für den Fall, dass in>0 is den negativen Wert der Spalte.

ABS liefert den Betrag, der aber bei positiven Zahlen nicht den negativen Wert darstellt und was mir das quadrat der Zahl hilft, um auf den negativen Wert zu kommen versteh ich nu auch net?!
vaest´ark // patrick *circle of confusion*

RANG Master of Clanintern

#8 - 18.03 17:16

hä, jetzt habt ihr mich vollends aus dem konzept gebracht.
Ynusis

RANG Deckschrubber

#9 - 18.03 17:20

öhm jo.

sortiert werden soll nach value.

und wenn in > 0 soll value*(-1) genommen werden zum sortieren.
horst

RANG Prophet of Clanintern

#10 - 18.03 17:41

ok, weil value mal so gar nicht sortiert war bei dir geht luxis vorschlag mit nem ORDER BY value nicht?
Crush (steht auf die extremeren Sachen)

RANG Deckschrubber

#11 - 18.03 19:26

code:
SELECT id, value FROM deine_tabelle ORDER BY ABS(value);
klaustopher

RANG Skill Apprentice

#12 - 18.03 19:35

code:
SELECT in, value, IF(in>0,value*-1,value) AS sorter FROM tabelle ORDER BY sorter
...
Crush (steht auf die extremeren Sachen)

RANG Deckschrubber

#13 - 18.03 20:05

Warum so kompliziert? "wenn < 0 dann * -1" ist doch genau das was abs() macht.
horst

RANG Prophet of Clanintern

#14 - 18.03 22:34

also, wenn ich in der tabelle

0 05
1 10
0 15
1 20

habe, dann soll es nach dem query so aussehen

-20
-10
+05
+15

(die plus sind nur für's schönere format)

dementsprechend wird ABS() keine große hilfe sein, oder?
es soll ja gerade dann ein minus vor, wenn die andere spalte einen bestimmten wert hat und DANACH soll sortiert werden.

jedenfalls dachte ich das verstanden zu haben...
*al!ve* - Vorbereitung aufs Urlaubssemester

RANG Master of Clanintern

#15 - 19.03 00:06

Woah, Horsti hat natürlich Recht. Ich seh auch grad, dass nicht der Absolutwert von value verwendet werden soll, sondern dass sich das Vorzeichen von value ändern soll, wenn in größer 0 ist.
Womit #3 bzw. #12 die richtigen Lösungen sein sollte.

code:
SELECT id, in, out, value, ((SIGN((SIGN(in)+1))*2)-1*value) AS sorting ORDER BY sorting
Ja, wenn man die Aufgabenstellung richtig liest kann man sich in Spielereien verlieren.
Crush (steht auf die extremeren Sachen)

RANG Deckschrubber

#16 - 19.03 07:25

Achso, dann hab ich es falsch verstanden.
horst

RANG Prophet of Clanintern

#17 - 19.03 13:53

Das versuchen wir euch ja schon die ganze Zeit mitzuteilen :-)
Ynusis

RANG Deckschrubber

#18 - 19.03 17:17

vielen dank :)

wusste nicht, dass man nach Werten sortieren kann, die man vorher erst generiert.