nummerische ENUM Values
am 26.07.2007 19:25:51 von Oliver LehmannHallo,
ich verwende MySQL 5.0 - leider gibts dort keine Check-Constraints.
Ich habe das Problem, das ich Datensaetze klassifizieren moecht nach 2
Kriterien "state" und "type". Der Endanwender soll die Klassifizierungs-
merkmale in der von Ihm konfigurierten Sprache sehen. Also habe ich mir
gedacht - erlaube ich als ENUM werte nur die jeweiligen TEXTIDs unter
denen dann die Uebersetzung gepflegt wird. Z.B.
typ ENUM ('180','190')
Und dann kann man in der Text-Tabelle fuer textid 180 und 190 den Text in
seiner jeweiligen Landessprache pflegen.
Soweit zur Theorie. Um die Auloesung Textid in den Columns typ und state
zu vereinfachen will ich mir eine View basteln welche meine Tabelle direkt
mit der Text-Tabelle joint um dann gleich den Text zu den Enum-Werten mit
zu bekommen:
SELECT mcs.mur_userid
,mcs.capitalsourceid
,mcs.type
,mtx1.text typecomment
,mcs.state
,mtx2.text statecomment
,mcs.accountnumber
,mcs.bankcode
,mcs.comment
,mcs.validtil
,mcs.validfrom
FROM capitalsources mcs
,text mtx1
,text mtx2
,settings mse
WHERE mse.name = 'displayed_language'
AND mse.mur_userid = mcs.mur_userid
AND mtx1.textid = mcs.type
AND mtx1.mla_languageid = mse.value
AND mtx2.textid = mcs.state
AND mtx2.mla_languageid = mse.value;
Problem - richtig - mtx1.textid/mtx2.textid ist vom typ INT - also bekomme
ich beim Zugriff auf mcs.type nur den Index, und nicht den "Inhalt". Das
ist nun ziemlich doof. Ich koennte das wahrscheinlich auch irgendwie
dekodieren, aber dazu habe ich ja eigentlich die ENUMs.... Ich bin jetzt
den Umweg ueber eine Mappingtabelle gegangen in der ich die ENUM-Werte in
die dazugehoerige Text-ID umwandle - was besseres ist mir irgendwie nicht
eingefallen. Hat irgendwer eine bessere Idee als:
SELECT mcs.mur_userid
,mcs.capitalsourceid
,mcs.type
,mtx1.text typecomment
,mcs.state
,mtx2.text statecomment
,mcs.accountnumber
,mcs.bankcode
,mcs.comment
,mcs.validtil
,mcs.validfrom
FROM capitalsources mcs
,text mtx1
,text mtx2
,enumvalues mev1
,enumvalues mev2
,settings mse
WHERE mse.name = 'displayed_language'
AND mse.mur_userid = mcs.mur_userid
AND mev1.enumvalue = mcs.type
AND mev2.enumvalue = mcs.state
AND mtx1.textid = mev1.mtx_textid
AND mtx1.mla_languageid = mse.value
AND mtx2.textid = mev2.mtx_textid
AND mtx2.mla_languageid = mse.value;
Wenn Tabellenstrukturen o.ae. benoetigt werden kann ich die liefern...
--
Oliver Lehmann
http://www.pofo.de/
http://wishlist.ans-netz.de/