MySQL Datenbank für Zahlungsarten

baserider

Well-known member
ID: 174417
L
10 März 2007
682
23
Hi,

ich habe für versch. Zahlungsarten eine Tabelle angelegt. Jede Zalungsart benötigt ja wiederrum unterschiedliche Daten. Für dies Daten gibt es extra Tabellen

In der Bestelltabelle wird gespeichert welche Zahlungsart man verwendet. Nur wie komme ich dann auf die Tabelle, wo die zusätzlichen Daten für jede Zahlungsweise gespeichert sind?

z.B. einzugsermächtigung. In der Bestelltabelle steht zahlungsart_id=1, daher weiß ich um was es sich handelt. Aber die restlichen Daten(blz,kontonr,bank) stehen ja in einer anderen Tabelle. Muss man denn immer anhand der id unterscheiden, welche tabelle man für die Details ausliest? bzw. wie is der bessere weg?
 
Wenn die Daten der Zahlungsarten sich nicht in eine Tabellen bringen lassen, gehts nicht anders.

Alternative wäre, zwangsweise alles in eine Tabelle zu schreiben, nur, dass du immer mit derselben Tabelle JOINen kannst. Bringt praktisch aber nichts, außer Speicherplatzverschwendung. Du musst dann ja doch unterscheiden, welche Attribute du jetzt konkret brauchst, also Milchmädchenrechnung.
 
Hi,

also geht es nur so, das ich zuerst ermittle, was is es für eine Zahlungsart und dann lese ich die Tabelle aus:

Code:
if ($row['zahlungsart'] == 'LASTSCHRIFT'){
    // Abfrage der Tabelle "Lastschrift"
}
 
Natürlich solltest du Konstanten benutzen, aber ja, eine Fallunterscheidung brauchst du in jedem Fall.
 
Konstanten halt. Natürlich kannst du auch n ENUM-Typ in der Datenbank nehmen. Der wird aber intern auch nur auf n numerischen Wert gemappt, von daher is das egal und du kannst es in PHP gleich ordentlich machen.
 
Meinst du sowas wie

define(LASTSCHRIFT,'Lastschrift') ? Ich hab doch den Begriff schon in der DB stehen wozu dann die Konstante?
 
PHP:
define('ZAHLUNGSART_LASTSCHRIFT', 0);
define('ZAHLUNGSART_RECHNUNG', 1);
// ...

Wäre eine Idee ;)

Und in der Datenbank hast du dann das passende Feld als TinyInt o.ä. definiert und kannst dann damit arbeiten. Dann entgehst du den Strings..
 
aber irgendwo muss ich das ganze ja auch zuordnen können.
wenn im quellcode steht if ($row['zahlungsart'] == 0) muss ich ja erstmal wissen um was es sich handelt

Meine tabelle sieht ja so aus:

id | zahlungsart | kennzeichen
1 | Rechnung | RECHNUNG
2 | Lastschrift | LASTSCHRIFT

In der Bestelltabelle steht dann zahlungsart_id = 1, und dann kann ich abfragen if ($row['kennzeichen'] == 'RECHNUNG'). Ich seh grad nicht den Nutzen einer Konstanten.
 
In der Bestelltabelle steht dann zahlungsart_id = 1, und dann kann ich abfragen if ($row['kennzeichen'] == 'RECHNUNG'). Ich seh grad nicht den Nutzen einer Konstanten.
Der Nutzen is einfach: Du hast deine fehleranfälligen, platzverschwendenden und unnützen Kennzeichen weg ;)
Oder was sollen dir die bitte bringen? :LOL:
 
id | zahlungsart | kennzeichen
1 | Rechnung | RECHNUNG
2 | Lastschrift | LASTSCHRIFT
zu welchem Zweck?
ich meine das ist ja mehr als umständlich.
Du speicherst bei der Bestellung eine 2 für Lastschschrift und rufst dann die Daten aus der Lastschrittabelle ab. Wofür brauchst dann hier zahlungart und kennzeichen? Falls Kennzeichen die Ausgabe sein sollte, reich das doch vollkommen.

In der Bestelltabelle steht dann zahlungsart_id = 1, und dann kann ich abfragen if ($row['kennzeichen'] == 'RECHNUNG'). Ich seh grad nicht den Nutzen einer Konstanten.
mit einer Konstante RECHNUNG = 1 kannst du dann die Zahlungsart identifizieren und benötigst deine extra Tabelle z.B. überhaupt nicht. Zudem ist der code viel sprechender und weniger fehleranfällig, wenn du dich in deinem Beispiel vertippst, hast du Pech gehabt.
 
Das Kennzeichen nutze ich zur Prüfung. Wieso ist das fehleranfällig?
Wenn ich eine Konstante benutze, steht ein Teil der Zahlungsart dort und der andere in der Datenbank
 
Wenn ich eine Konstante benutze, steht ein Teil der Zahlungsart dort und der andere in der Datenbank

Naja, eben nicht. Du definierst nur in einer Datei die nötigen Kostanten und sorgst dafür, dass diese auch da geladen wird wo du mit den Konstanten arbeiten möchtest.
Auslesen aus der DB der Werte und daraufhin die Konstanten definieren halte ich nicht für geschickt - falls du an so etwas gedacht hast. Was anderes lese ich da nicht raus. :-?
 
Deswegen benutzt man da auch dann direkt die Konstante. Dafür definiert man diese ja global ;)

PHP:
if ($row['zahlungsart'] == ZAHLUNGSART_LASTSCHRIFT)

Ach ok, stimmt, da habe ich zu schnell geantwortet :) Aber wenn ich mir aus der Tabelle z.B. eine Selectbox erzeugen möchte, dann muss ich ja immer aufpassen das die ID in der Tabelle gleich dem Wert der Konstanten ist. Oder seh ich das falsch?
 
Aber wenn ich mir aus der Tabelle z.B. eine Selectbox erzeugen möchte, dann muss ich ja immer aufpassen das die ID in der Tabelle gleich dem Wert der Konstanten ist. Oder seh ich das falsch?
Nö, siehst du falsch. Die Konstante geht doch über PHP direkt ins Template-System und von dortaus in das value-Attribut deiner <option>-Tags. Da kann nix schiefgehen.
 
Hm.. achso.. nu sehe ich deine Problematik.
Naja, wenn du alles dynamisch handhabst mit den Zahlungsweisen wirst du es wahrscheinlich wirklich besser ohne Konstanten machen können. Allerdings speicher dann als 'zahlungsart' in der Tabelle lieber die ID zu der Zahlungsart und nicht die Bezeichnung, denn diese könnte sich ja mal ändern oder so ;)

@tH: Ich glaube er will wirklich nur ganz simpel eine Tabelle haben in welcher die Zahlungsarten eingetragen werden können und dann wird eine Verbindung zwischen einer Buchung oder so hergestellt zu einer Zahlungsart..
Wenn man da nun wirklich Konstanten im Code definiert darf man ja immer im Code Änderungen vornehmen, wenn man eine neue Zahlungsart einträgt - doof, oder?
 
ok, ich amch mal ein Beispiel:

PHP:
define('ZAHLUNG_RECHNUNG',1)
define('ZAHLUNG_LASTSCHRIFT',2)

meine Tabelle Zahlungsart sieht so aus:

id | zahlungsart
3 | Rechnung
4 | Lastschrift

also steht in den Options als value 3 und 4, (Erzeugen der Selectbox über Select .... usw), also in der bestelltabelle steht ebenfalls 3 bzw. 4. We klappt dann die Prüfung wenn die Konstante einen anderen Wert enthält?

PHP:
if ($row['id'] == ZAHLUNG_LASTSCHRIFT) ?
 
Hm.. achso.. nu sehe ich deine Problematik.
Naja, wenn du alles dynamisch handhabst mit den Zahlungsweisen wirst du es wahrscheinlich wirklich besser ohne Konstanten machen können. Allerdings speicher dann als 'zahlungsart' in der Tabelle lieber die ID zu der Zahlungsart und nicht die Bezeichnung, denn diese könnte sich ja mal ändern oder so ;)

Ja so meinte ich es und mit der Änderung des Begriffes hast du recht, deswegen habe ich das Kennzeichen, welches immer gleich bleibt. wenn z. B. aus Lastschrift mal Lastschrifteinzug wird, dann is das Kennzeichen trotzdem LASTSCHRIFT und bleibt auch immer so. Erhöht ja auch die Lesbarkeit im Code, als wenn ich die id nehmen würde