MySQL Select Problem

florian_s

Cadet 1st Year
Registriert
Aug. 2006
Beiträge
11
Hallo liebe Forummitglieder,
bin zwar neu hier im Forum angemeldet, aber ich lese hier schon seit einiger Zeit fleißi mit.

Suchfunktion habe ich auch schon genutzt, leider nichts passendes gefunden.

Zu meinem Problem:

Ich habe in MySQL 2 Tabellen (grobe struktur):

1. Tab -> abkuerzungen (dient als übersetzung)

Aufbau:
key | value | txt
1 | 1 | Herr
1 | 2 | Frau
2 | 1 | Dr.
2 | 2 | Prof.

2. Tab -> kunden
anrede | titel | name
1 | 2 | hans
2 | 1 | ute
1 | 1 | peter


wenn ich jetzt einen select über die tabelle kunden ausführe bekomme ich natürlich für die anrede entweder 1 oder 2 raus. ich würde gerne ein sql-query abschicken das in etwa so aussieht, leider funktioniert das nicht so. kann mir vielleicht einer von euch weiterhelfen?

SELECT
name,
(SELECT txt FROM abkuerzungen WHERE key = 1 AND value = kunden.anrede ) AS anrede
FROM
kunden​

EDIT:
ich kenne schon die CASE anweisung von mysql, leider hilft sie mir nicht so viel weiter, da sie ja recht statisch ist...

Fehlermeldung von mySQL sagt nur, dass in der zeile ein fehler ist. das hilft mir natürlich nicht so viel weiter.

jetzt hoffe ich auf eure unterstützung.

danke schonmal
 
Zuletzt bearbeitet:
Ersetze mal
Code:
key = 1

durch

Code:
`key`  = 1
 
hallo,
danke schon mal für deine antwort...

ich habe key und value in ' gesetzt...

fehlermeldung gibt es jetzt zwar nicht mehr, aber das feld anrede ist trotzdem leer...

kannst du mir da auch weiterhelfen?
 
IMHO ist dein Ansatz, Titel und Anrede in derselben Tabelle zu speichern, nicht wirklich sinnvoll, da beides voneinander völlig unabhängig ist.
Benutz für Anrede und Titel lieber zwei Tabellen statt einer.

Das könnte zum Beispiel so aussehen:

Tabelle anrede:
anrede_key|text
1|Herr
2|Frau

Tabelle titel:
titel_key|text
1|Dr.
2|Prof.

Tabelle kunde:
kunde_key|anrede_key|titel_key|vorname|nachname
1|1|1|Max|Mustermann
2|2|2|Gabi|Musterfrau

Dann kannst du mit folgendem SQL-Statement den vollen Anrede-Text auslesen:
Code:
SELECT a.text, t.text, k.vorname, k.nachname
  FROM anrede AS a, titel AS t, kunde AS k
 WHERE k.anrede_key = a.anrede_key
   AND k.titel_key = t.titel_key
 
@ Cobinja

Deine Lösung ist richtig und auch zukunftssicher. Aber sind wir mal ehrlich. In der Tabelle anrede werden nie mehr als zwei Datensätze stehen, von daher denke ich, kann man einfach in der kunden-tabelle per enum 0 oder 1 abspeichern und dann entweder mittels PHP abfragen. If($wert = 0) echo "Herr"; else echo "Frau"; oder sogar über die CASE THEN Anweisungen direkt in der Query: Kenne gerade nur nicht das genaue Statement dafür, dürfte aber im Manual nachzulesen sein.

Die Tabelle titel lohnt sich schon eher, wobei da nach Dr., Prof. und vielleicht Diplom. Ing. auch nicht mehr viel kommt. Ich denke auch da könnte man auf eine separate Tabelle verzichten und einfach nur wieder einen Zahlenwert speichern und später dann entweder mittels besagter CASE Anweisungen oder PHP ausgeben.

Edit:
Habe gerade noch mal im Manual nachgelesen. Eine Query würde demnach bei folgender Datenbankstruktur wie folgt aussehen:

kunden
-id-mediumint
-vorname-varchar(64)
-nachname-varchar(64)
-anrede-enum(0, 1)
-titel-enum(0, 1)

Code:
SELECT vorname, nachname, CASE anrede WHEN 0 THEN 'Herr' ELSE 'Frau' END AS anrede_status, CASE titel WHEN 0 THEN 'Dr.' ELSE 'Professor' END AS titel_status FROM kunden
 
Zuletzt bearbeitet:
bei der 4.x wars glaube noch so? IF(Bedingung,true,false), bsp: IF(a>b, 'richtig','falsch') as wunschname
Evt. das IF selber auch weglassen. einfach mal probieren.
 
Zuletzt bearbeitet:
@KonKorT: Klar kann man es so machen, wie du es denkst.

Aber was, wenn's mal internationale Kunden gibt? Dann heisst es plötzlich z.B. Mr. oder Mrs.
Und dafür die Datenbank wieder umbiegen?
Dann lieber gleich vernünftig machen.
 
hallo,
danke schon mal für die vielen antworten...

das war natürlich nur ein kleines beispiel... in der tabelle abkuerzungen stehen bei mir nicht nur Anrede und Titel drin, sondern 12 schlüsselkombinationen und es werden stetig mehr...

und auf die Kunden Tabelle muss ich auch in zig verschiedenen Variantionen zugreifen. Deswegen ist es dann sehr mühsam im nachhin die ganzen SQL Statements zu korrigieren bzw. zu erweitern.

EDIT: @#4 da ich soviele verschiedene Kombinationen habe, wollte ich nicht für jede Kombi eine neue Tabelle anlegen. Es sind dann ja immer nur 2-5 Datensätze pro Kombi

Gruß
 
Zuletzt bearbeitet:
Zurück
Oben