"We are back" « oc.at

mysql: Problem mit Enum-Spalte

kleinerChemiker 01.09.2005 - 08:49 755 4
Posts

kleinerChemiker

Here to stay
Avatar
Registered: Feb 2002
Location: Wien
Posts: 4303
mysql 4.1.12

Folgende 2 Queries liefern für die SUM()-Spalte die selben falschen Ergebnisse.

SELECT t1 . * , SUM( t2.feld2 )
FROM test1 AS t1
LEFT JOIN test2 AS t2 ON t2.feld1 = t1.feld5
WHERE t1.feld5 =2
GROUP BY t1.feld5
LIMIT 0 , 100

SELECT t1 . * , SUM( t2.feld2 )
FROM test1 AS t1
LEFT JOIN test2 AS t2 ON t2.feld1 = t1.feld5
WHERE t1.feld5 =2
GROUP BY t1.feld5
LIMIT 0 , 10


t2.feld2 ist eine enum-spalte mit den möglichen werten -1, 0, 1. Ich habe schon SUM(CAST(t2.feld2 AS SIGNED)) oder SUM( t2.feld2+0 ) (ein tip aus der doku) versucht, liefert jedoch das selbe Ergebnis. Anstatt den Werten, werden die Indizes summiert.

Jemand eine Idee? Oder bleibt nur die Konversion zu Tinyint?

tia

MIK
Bearbeitet von kleinerChemiker am 06.09.2005, 12:42 (solved)

cduke

Big d00d
Registered: Nov 2001
Location: 1230 Wien
Posts: 253
Hi,

ich habe gerade Google bemüht, aber nichts dazu gefunden. An Deiner Stelle würde ich zu TINYINT wechseln - ist zwar sehr ärgerlich, aber wenn es mit ENUM nicht geht. Nachdem Du mit dem Feld auch rechnen willst, fällt dann auch der Typecast weg und es läuft ein bisserl schneller. Ist halt die Frage, ob das auffällt :)

greetz cduke

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
Das Ganze is ein bekanntes Problem, und wird im Manual in den Comments auführlich diskutiert... (Edit: Nicht mehr, die Comments wurden wohl mit dem neuen Design gelöscht...)
Wieso zieht man Enum einem TinyInt vor wenn man erst wieder nur ziffern drin hat?
TinyInt braucht sogar weniger Platz...

Egal... hast du es schon mit einem Subselect probiert? Wenn du "Glück" hast wird enum zum String in der Temptable - Genauere Infos konnte ich aber im Manual nicht finden...

kleinerChemiker

Here to stay
Avatar
Registered: Feb 2002
Location: Wien
Posts: 4303
tinyint braucht weniger platz? dachte beides braucht gleich viel platz. enum hätte den vorteil, daß eben nur die erlaubten werte eingefügt werden könnten. außerdem wären es nicht nur zahlen, aber lös ich es halt mit tinyint, bevor ich da unnötige subselects und temptables brauch.

thx & solved

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
naja, es braucht um die Definition der Werte im Tableheader weniger Platz :D
Aber es braucht weniger...
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz