SQL Realisierung Möglichkeit ein Feld hat 2 werte.

Gamecard

Lieutenant
Registriert
Apr. 2010
Beiträge
866
Also ich habe ein Realisierung Problem.(Bin Anfänger was das angeht.!)

Ich habe ein Login System erstellt mit der üblichen MySQL Feld Namen id, user, email ect....,diese Felder haben ein wert.

Aber für meine vorhaben brauche ich ein Feld mit 2 Werten das sollte auslesbar sein sowie änderbar.

Ich möchte einfach zu mein Login System Öffnungszeiten für 7 Tage einfügen und mein Problem liegt bei der Uhrzeit weil zwei werte(Uhrzeit) müssen gespeichert werden in ein Feld(Tag)"13:00" bis "17:00".
 
Hi,

wieso "muss" das in ein Feld? Was spricht gegen ein Feld "uhrzeit_von" und ein Feld "uhrzeit_bis"?

Und achte doch bitte ein bisschen auf Rechtschreibung.

VG,
Mad
 
Die sauberste Lösung wäre einfach eine weitere Spalte anzulegen:
Von - Bis

Alternativ würde ich die Uhrzeit mit einem Semikolon trennen und beim auslesen, dieses Zeichen, als Trennzeichen benutzen.
 
Die saubere Lösung wäre tatsächlich eigene Felder dafür zu erstellen und ich denke, in deinem Fall ist einfach nur eine angemessene Organisation der Datenbanklogik notwendig.
In den wenigen Fällen, wo doch mehrere Werte in eine Spalte sollen (wenn zB in 99% nur ein Wert vorkommt, aber selten eben auch mehrere), kann man eben Trennzeichen verwenden. Von einem Semikolon würde ich dabei aber strikt abraten, da die ein SQL-Steuerzeichen ist und auch wenn es funktionieren sollte, gibt es doch immer wieder Probleme. Bei mir hat sich daher das "|" als Trennzeichen bewährt, da es weder in normalen Texten, noch als Steuerzeichen besonders häufig vorkommt.
 
Das Query sieht dann aber ziemlich besch...eiden aus, wenn man das in einem Feld speichern will. Irgendwas in der Richtung:
Code:
SELECT ...,
  STR_TO_DATE(SUBSTRING_INDEX(SUBSTRING_INDEX(zeitraum, ' ', 1), ' ', -1), '%Y-%m-%d') as zeitraum_von,
  STR_TO_DATE(SUBSTRING_INDEX(SUBSTRING_INDEX(zeitraum, ' ', 2), ' ', -1), '%Y-%m-%d') as zeitraum_bis
WHERE
  zeitraum_von >= NOW()
AND
  zeitraum_bis <= NOW()

Also String splitten am Leerzeichen und jeweils ein Date draus parsen.
 
benneque schrieb:
Das Query sieht dann aber ziemlich besch...eiden aus
Er meint auch sicherlich nicht im Query, sondern in der Sprache darüber. Man kann extrem verkrüppelte DB-Layouts entwerfen, wenn man bspw. nur in PHP mit einem explode() aufwartet. Mögliche Abfragen sind dann passé oder wie bei dir mit extrem hohen Aufwand verbunden.
 
In den wenigen Fällen, wo doch mehrere Werte in eine Spalte sollen (wenn zB in 99% nur ein Wert vorkommt, aber selten eben auch mehrere), kann man eben Trennzeichen verwenden. Von einem Semikolon würde ich dabei aber strikt abraten, da die ein SQL-Steuerzeichen ist und auch wenn es funktionieren sollte, gibt es doch immer wieder Probleme.
Alles nur eine Frage ob man richtig quotiert bzw ob man parametrisiert arbeitet oder Strings für den SQL zusammenbastelt.
Kriminell wirds nur mit eckigen Klammern + C# das ist eine Kombination bei der das quotieren nicht mehr ganz so intuitiv ist X)
[Spaß an]Ansonsten varchar(max) fürs Feld nehmen und reinballern was man will X)[/Spass an] Weder performant noch lesbar, Yuuri hatte da schon den besten Tip für den TE ;)
 
alxtraxxx schrieb:
[Spaß an]Ansonsten varchar(max) fürs Feld nehmen und reinballern was man will X)[/Spass an]

Invalid Syntax, no closing "Spaß an" Tag found.
 
Zurück
Oben