Ein Paar allgemeinen Fragen zu MySQL

aleks

Mitglied
Hallo Zusammen,
wie der Titel schon sagt, hab ich ein paar Fragen zu MySQL, nämlich:
  1. Wie muss ich ein Feld in SQL deklarieren damit es die Daten eines Select-Elements speichern kann?
  2. Wie werden Felder für checkboxen in SQL deklariert?
Schon mal Danke im Voraus.
Gruß Aleks
 
Hallo!

Die Frage kann man pauschal so nicht beantworten.
Es kommt eher darauf an, was für Elemente im Select bzw. der Checkbox definiert sind.
Ist es ein Text-String? Dann wird für gewöhlich VARCHAR genommen.
Ist es aber z.b. ein Datum, dann wird DATE genommen.
Gibt noch mehr Feldtypen, einfach mal im MySQL-Manual nachsehen.

Beim Zeichensatz für Text geht die Tendenz immer mehr zu UTF-8 (Unicode) über.
Mehr zum Zeichensatz findest Du ebenfalls im MySQL-Manual unter Character Set Support.

Gruss Dr Dau
 
Hallo danke erst mal für die Antwort.Gut dann werde ich etwas konkreter:
Ich hab ein Menü für <select> das sieht so aus:
PHP:
 <p>
<label for="Sternzeichen">Sternzeichen</label><select name="sternzeichen" > <?php
	print ('<option  value=1>Steinbock</option\ <br>');
	print ('<option  value=2>Wassermann</option <br>');
	print ('<option value=3>Fische</option <br>');
	print ('<option  value=4>Wider</option <br>');
	print ('<option  value=5>Stier</option <br>');
	print ('<option  value=6>Zwillinge</option><br>');
	print('<option  value=7>Krebs</option <br>');
	print ('<option  value=8>L&ouml;we</option <br>');
	print ('<option  value=9>Jungfrau</option <br>');
	print ('<option  value=10>Waage</option <br>');
	print ('<option  value=11>Skorpion</option <br>');
	print ('<option  value=12>Sch&uuml;tze</option <br>');
	?>
	</select></p>
und für die Checkboxen sieht das so aus:
HTML:
<p>
<span class="spalte1">
<input name="restaurants" type="checkbox" value="checkbox"><label for="restaurants" >Restaurants </label></span> 
<span class="spalte2">
<input name="bar" type="checkbox" value="checkbox"><label for="bar" >Bar</label></span> 
<span class="spalte3">
<input name="einkaufszentrum" type="checkbox" value="checkbox"><label for="einkaufszentrum" >Einkaufszentrum</label></span> 
<span class="spalte4">
<input name="natur" type="checkbox" value="checkbox"><label for="natur" >Natur</label></span></p>


<p>
<span class="spalte1">
<input name="sportevents" type="checkbox" value="checkbox"><label for="sportevents" >Sportevents </label></span> 
<span class="spalte2">
<input name="austellungen" type="checkbox" value="checkbox"><label for="austellungen" >Austellungen</label></span> 
<span class="spalte3">
<input name="theater" type="checkbox" value="checkbox"><label for="theater" >Theater</label></span> 
<span class="spalte4">
<input name="musical" type="checkbox" value="checkbox"><label for="musical" >Musical</label></span></p>... usw.
Ingesamt habe ich 32 Checkboxen. Ich denke das es der Typ CHAR sein wird für diese beiden Sachen. Meine Frage ist jetzt muß ich für jede Checkbox ein einzelnes Feld in der Datenbank deklarieren oder kann man irgendwie ein gemeinsames Feld machen?

Gruß Aleks
 
Guter Stil wäre es, eine Tabelle mit den Auswahlmöglichkeiten für jede Checkbox anzulegen und den Inhalt der Checkboxen beim Aufruf des Formulars über entsprechende DB-Abfragen zu füllen. Das macht Dich unabhängig vom Quellcode und vereinfacht spätere Anpassungen / Änderungen.

In der Haupttabelle benötigst Du dann nicht für jede Checkbox ein Feld, das die Auswahl speichert. Elegant ist es, über eine Zwischentabelle zu arbeiten, die Verknüpfungen zwischen Datensatz und Checkbox herstellt.

Beispiel:

Tabelle_Datensatz
Datensatz_ID INT
Name VARCHAR
Vorname VARCHAR

Tabelle_Checkbox
Checkbox_ID INT
Bezeichnung VARCHAR

Tabelle_Checkbox_Option
Option_ID INT
Bezeichnung VARCHAR

Tabelle_Option_Zuordnung
Zuordnung_ID INT
Checkbox_ID INT
Option_ID INT

Tabelle_Checkbox_Zuordnung
Checkbox_Zuordnung_ID INT
Datensatz_ID INT <-- Benutzer
Zuordnung_ID <-- getroffene Auswahl

In der letzten Tabelle werden also alle ausgewählten Felder gespeichert. Ich hoffe, zumindest nach mehrmaligem Lesen ist das Schema verständlich (unbedingt Eigen- und Fremdschlüssel beachten). Ansonsten erkläre ich es auch gerne noch mal ausführlich ;)
 
Danke erst mal.
Wenn ich dich richtig verstanden haben, dann ist folgende Datenbankstruktur enstanden (siehe Graphik). Ich habe noch eine Frage zu dieser Datenbankstruktur wird in der Tabelle_Checkbox_Option die 32 Checkboxen gespeichert also der Name der einzelnen und in der Tabelle_Option_Zuordnung wird gespeichert welchen Zustand die einzelnen haben.Richtig,oder nicht ?

Gruß Aleks


? ??
 

Anhänge

  • beispiel.gif
    beispiel.gif
    1,9 KB · Aufrufe: 29
Hallo Aleks,

gedacht ist das Schema so:

Tabelle_Datensatz enthält alle grundsätzlichen Parameter wie Name, Vorname etc. Tabelle_Checkbox beinhaltet alle genutzten Instanzen von Checkboxen, also z.B. Sternzeichen, Gehalt usw. Tabelle_Checkbox_Option beinhaltet nun für jede mögliche Checkbox aus der gerade genannten Tabelle alle möglichen Auswahlfelder, also z.B. Steinbock, Wassermann, 0-2000 EUR, 2001-5000 EUR usw.

In Tabelle_Option_Zuordnung findet erst die tatsächliche Zuweisung der einzelnen Optionsfelder zu den jeweiligen Checkboxen statt, d.h. aus dieser Tabelle heraus sollten die Checkboxen dynamisch gefüllt werden, etwa so:

SQL:
SELECT CO.Bezeichnung FROM Checkbox_Option CO, Option_Zuordnung OZ 
WHERE CO.Checkbox_ID = 12 AND CO.Option_ID = OZ.Option_ID

Die Tabelle_Checkbox_Zuordnung schließlich beinhaltet die konkrete Auswahl des Benutzers für jede Checkbox, d.h. hier wird der Auswahlzustand gespeichert.

Ich habe das zugrundeliegende Schema als Grafik angehängt, vielleicht wird es so etwas deutlicher. Ich habe leicht andere Namen für die Tabellen und Felder verwendet, aber das sollte nicht weiter stören ;)

Ich hoffe jedenfalls, dass das Konzept nun deutlicher wurde. Ansonsten frag halt noch mal ;-)
 

Anhänge

  • DB_Checkbox_Forum_Demo.JPG
    DB_Checkbox_Forum_Demo.JPG
    24,8 KB · Aufrufe: 21
Zuletzt bearbeitet von einem Moderator:
Danke Jochen_Schneider erst mal.
Ich wollte nur was klar stellen: meine Auswahlfelder sind unabhängig von den Ckeckboxen. Bei mir gibt es keine Bedingung. Man muß keine Checkbox aktivieren um eine bestimmte Auswahllisten eine Wahl vorzunehmen. Wie gesagt Checkboxen und Auswahlisten sind unabhängig!!
Ich habe mir das wie folgt gedacht: inder Tabelle_Checkbox werden alle zur Verfügung stehenden Checkboxen gespeichert, die Zustände der einzelnen Checkboxen wird ja in Tabelle_Option_Zuordung gespeichert. Also kann man sich die Tabelle_Checkbox_Option sparen.

Bei der Gelegenheit will ich kurz mal erläutern was das ganze soll: Es handelt sich um ein Anmeldungsformular das über 2 Seiten geht.Dort gibt es Eingabefelder, Auswahlfelder,Checkboxen,Optionsfelder,Textarea und ein Uploadfeld für Bilddateien. Das ganze soll dann in der Datenbank gespeichert werden.
Ich hoffe es ist jetzt klarer geworden.

Gruß Aleks
 
Huch :eek:

Ich merke gerade, dass ich da was total durcheinander gewürfelt habe... Das oben gezeigte Schema eignet sich natürlich nicht für Checkboxen, sondern für Auswahlfelder :rolleyes: Ersetze also alle Vorkommen von "Checkbox" durch "Auswahlfeld".

Den Zustand einer Checkbox speicherst Du am besten als Integer-Wert, also Null, falls nicht aktiviert, und 1, falls aktiviert. Die Zuordnung zu den Benutzerdaten erfolgt analog zum o.g. Schema.

Und noch ein Tipp für das Bild: Speichere in der Datenbank auf keinen Fall das Bild selbst (etwa als Blob), sondern lediglich den Speicherpfad zur Bilddatei. Das beschleunigt die ganze Geschichte sehr deutlich.
 
Zurück