Maresa P: HTML Checkboxes Status in Datenbank abspeichern

Hallo,

in eine MySQL Datenbank befinden sich ein der Tabelle "Anbieter" die Adressdaten von ca. 500 Anbietern.

Pro Anbieter sollen Leistungen (ca. 20 Stück) abgespeichert werden, welche mittels HTML-Eingabemaske per Formular Checkbox gepflegt werden können.

Bspl.:

Name: Anbieter 1
Str.: Blumenweg 23
Ort: Braunschweig
Leistung-Checkbox 1
Leistung-Checkbox 2
Leistung-Checkbox 3
Leistung-Checkbox 4
Leistung-Checkbox 5
Leistung-Checkbox 6
Leistung-Checkbox 7
...
Leistung-Checkbox 20

In der Datenbank muss dann lediglich pro Checkbox und Anbieter eine Flag gesetzt werde, ob die Leistung angeboten wird und somit die Checkbox aktivert werden muss. Mir erscheint es allerdings etwas umständlich, die Tabelle der Anbeiter einfach um 20 Spalten (Typ INTEGER 1) zu erweitern.

Gibt es da nicht eine bessere möglichkeit (Bspl. nur ein Feld mit Binärzahl)??

Vielen Dank für Euere Hilfe!

  1. Hallo Maresa!

    Gibt es da nicht eine bessere möglichkeit (Bspl. nur ein Feld mit Binärzahl)??

    Du kannst Dir mal http://www.mysql.com/doc/en/SET.html anschauen, das könnte das sein, was Du suchst.

    Ansonsten kannst Du natürlich auch eine zusätzliche Tabelle anlegen, mit den Spalten leitungs_id, anbieter_id, checked.
    Dann müßtest Du eben immer eine zusätzliche Tabelle auswählen, dafür wäre diese Lösung beliebig erweiterbar.
    (sinnvoll wäre dann vielleicht noch eine leistungs_id - leistungs_bezeichnung - Zuordnungstabelle)

    MfG
    Götz

    --
    Losung für Montag, 22. März 2004
    Dein Wort ist meines Fußes Leuchte und ein Licht auf meinem Wege. (Psalm 119,105)
    Gib deinen Knechten, mit allem Freimut zu reden dein Wort. (Apostelgeschichte 4,29)
    (http://www.losungen.de/heute.php3)
  2. use Mosche;

    In der Datenbank muss dann lediglich pro Checkbox und Anbieter eine Flag gesetzt werde, ob die Leistung angeboten wird und somit die Checkbox aktivert werden muss. Mir erscheint es allerdings etwas umständlich, die Tabelle der Anbeiter einfach um 20 Spalten (Typ INTEGER 1) zu erweitern.

    Gibt es da nicht eine bessere möglichkeit (Bspl. nur ein Feld mit Binärzahl)??

    Vorneweg: Ich würde prinzipiell die Lösung von Götz bevorzugen (extra Tabelle), weil es einfacher zu lesen (und dann auch zu warten) ist.

    Du hast natürlich die Möglichkeit, die 20 Attribute in einer einzigen Dualzahl unterzubringen, wobei jede Stelle angibt, ob die entsprechende Leistung ausgewählt ist oder nicht:

    1001011 würde bedeuten:
    Erste Leistung aktiviert, zweite und dritte nicht, vierte aktiviert, ...

    Du hättest dann eine zwanzigstellige Zahl. Das sind dann etwas über eine Millionen Zustände (2^20), die du damit abspeichern kannst. Um die Zahl zu komprimieren, kannst du sie dann noch in ein anderes Zahlensystem umwandeln, wozu jede Programmiersprache in der Lage sein sollte. Im Dezimalsystem hättest du dann nur noch 7 Stellen, im Hexadezimalsystem noch weniger. Du kannst dann allerdings nicht auf Anhieb Ordnung oder ähnliches herstellen, sondern bist auf Programmlogik angewiesen.

    use Tschoe qw(Matti);

    --
    neues Selftreffen?
    http://selfcommunity.teamone.de/foren/community/?t=2241&m=2687
      Anyone who quotes me in their sig is an idiot. -- Rusty Russell.
    1. Hallo!

      [...] Du kannst dann allerdings nicht auf Anhieb Ordnung oder ähnliches herstellen, sondern bist auf Programmlogik angewiesen.

      Vielen Dank für Euere Antworten.
      Ich hab nun doch alles in der Haupttabelle abgespeichert, da es eifnacher zum handeln ist, wenn die Werte per Formular ausgelesen werden sollen.
      Zuviel Programmlogik ist ein Hindernis, wenn ich die Daten mal für etwas anderes benötige.

      Vielen Grüße!

      Maresa

      1. use Mosche;

        Vielen Dank für Euere Antworten.
        Ich hab nun doch alles in der Haupttabelle abgespeichert, da es eifnacher zum handeln ist, wenn die Werte per Formular ausgelesen werden sollen.

        Naja, jetzt musst du, wenn du eine zusätzliche Leistung einfügen willst, deine Tabelle verändern. Im anderen Falle (wenn du die Leistungen in einer Extra-Tabelle "senkrecht" (als Tupel) speicherst) brauchst du nur einen neuen Datensatz einfügen.

        use Tschoe qw(Matti);

        --
        neues Selftreffen?
        http://selfcommunity.teamone.de/foren/community/?t=2241&m=2687
          Anyone who quotes me in their sig is an idiot. -- Rusty Russell.