Ankündigung

Einklappen
Keine Ankündigung bisher.

MySQL und Boolean: Werte nur auslesen, wenn TRUE

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • MySQL und Boolean: Werte nur auslesen, wenn TRUE

    Hallo Community,

    ich möchte folgendes mit PHP und MySQL verwirklichen:

    Ein Prozessor besitzt bekanntlich mehrere Befehlssätze wie MMX, SSE, SSE2, usw. Hier habe ich geplant, für jeden Befehlssatz eine eigene Spalte anzulegen, wo dann in dem Feld entweder TRUE (wenn der Prozessor dieses unterstützt) oder FALSE (wenn es nicht unterstützt wird) gespeichert wird.

    Wie lese ich das ganze wieder aus, so dass nur die Befehlssätze angezeigt werden, die der jeweilige Prozessor auch unterstützt? Im Prinzip möchte ich, dass dann folgendes zu Lesen ist:

    Athlon XP, Unterstützte Befehlssätze: MMX, 3DNow!, SSE
    Athlon 64, Unterstützte Befehlssätze: MMX, 3DNow!, SSE, SSE2
    Pentium D, Unterstützte Befehlssätze: MMX, 3DNow!, SSE, SSE2

    Bis jetzt mache ich in PHP einen MySQL-Query und lese alle Felder aus (SELECT * FROM bla), um dann unter anderem mit mysql_fetch_assoc auf die Felder zuzugreifen.

    Muss ich jetzt für jede Spalte eine IF-Anweisung erstellen? Ist es überhaupt sinnvoll, für jeden BEfehlssatz eine Spalte zu erstellen?

    Wäre für Eure Hilfe sehr dankbar!

  • #2
    Hallo schmidtsmikey,
    ob es sinnvoll ist für jeden Befehlssatz eine Spalte anzulegen ist ermessenssache und hängt davon ab, wieviele es gibt.... . Tendenziell würde ich aber mal sagen "Nein, mach es anders"
    Wenn du es so machen möchtest musst du wirklich auf jedes Feld eine If-Abfrage setzen die prüft ob es 1 oder 0...

    Die "saubere" Lösung ist es, für die Befehlssätze eine extra Tabelle anzulgen und mit einer 3. Tabelle die Befehlssätze den Prozessoren zuzordnen...
    [URL="https://www.quizshow.io/"]Create your own quiz show.[/URL]

    Kommentar


    • #3
      Hi,

      Und die einfachste wäre, einfach den String zu speichern und wieder auszulesen.

      Gruß Thomas

      Kommentar


      • #4
        Zitat von Thomas Beitrag anzeigen
        Und die einfachste wäre, einfach den String zu speichern und wieder auszulesen.
        Womit du dann aber so ziemlich die unflexibelste Lösung ausgesucht hättest
        [URL="https://www.quizshow.io/"]Create your own quiz show.[/URL]

        Kommentar


        • #5
          Zitat von agrajag Beitrag anzeigen
          Die "saubere" Lösung ist es, für die Befehlssätze eine extra Tabelle anzulgen und mit einer 3. Tabelle die Befehlssätze den Prozessoren zuzordnen...
          Ich will dann mal die "saubere" Möglichkeit zumindest durchdenken Hmm, ich habe also eine Tabelle t_prozessoren (id, hersteller, name, takt, fsb, usw.). Dann habe ich eine zweite Tabelle t_befehlssatz (id, prozessor_id, mmx, sse, sse2, usw).

          Wieso jetzt eine dritte Tabelle? Wie ordne ich die BEfehlssätze den Prozessoren zu?

          Kommentar


          • #6
            mit einer 3. Tabelle die Befehlssätze den Prozessoren zuzordnen...
            über die 3. tabelle wird zugeordnet, die id der einen tabelle zu der id der anderen tabelle
            (id_prozessor, id_befehlssatz)

            edit:
            aufbau der 2. tabelle:
            id_befehl, befehlssatz
            ---------------------
            1, sse
            2, mmx
            3, sse2

            sonst funktioniert des auch mit vielen if's
            Karteikasten
            "Es gibt auch Linux-Aussteiger. Aber die Rückfallquote steigt mit jeder Win-Version." - Walter Saner in de.newusers.questions

            Kommentar


            • #7
              Achso, in der dritten Tabelle würden dann folgende Einträge stehen:

              id_prozessor, id_befehl
              ----------------------
              1, 1
              1, 2
              1, 3
              2, 1
              2, 2
              2, 3
              2, 4
              3, 1
              3, 2
              usw....

              Dann müsste ich nur SELECT id_befehl WHERE id_prozessor = 2; und hätte dann die Befehlssätze. Und das funktioniert wirklich ohne IF's. Werde es morgen mal programmieren und das Ergebnis posten.

              Danke erst einmal.

              Kommentar


              • #8
                Zitat von agrajag Beitrag anzeigen
                Womit du dann aber so ziemlich die unflexibelste Lösung ausgesucht hättest
                Hi,

                Das stimmt natürlich. Aber man muss auch immer den Aufwand abschätzen. Ich persönlich würde es auch über die n:m Beziehung machen.

                Gruß Thomas

                Kommentar


                • #9
                  Macht es nicht Sinn, in diesem Fall den Datentyp SET zu nutzen? Ich bin darauf gekommen, dass nach dem 3-Tabellen-Prinzip eine prozessor_id mehrfach vorkommt und ich alle Datensätze einer prozessor_id löschen muss, wenn ich Änderungen an einem Datensatz vornehme. Nach dem Prinzip: "Erst alles löschen und dann wieder neu in die Tabelle schreiben".

                  Eigentlich ist SET genau der passende Datentyp, aber ich sehe irgendwie Probleme bei der späteren Datenpflege, wenn Einträge aktualisiert werden müssen. Ich habe im Prinzip ein eigenes Admin-Menü programmiert, in dem ich mit HTML-Formularen die Datensätze speichere.

                  Bezogen auf die Befehlssätze stelle ich mir vor, dass ich mit Checkboxen arbeite. Hier habe ich schon allein das Problem, dass ich nicht weiß, wie ich die Datensätze so auslese, dass ich die entsprechenden Checkboxen vormarkiere.

                  Kommentar


                  • #10
                    warum du alle datensätze einer prozessor_id löschen willst , um diese zu ändern, bleibt mir unklar. die lassen sich einzeln auswerten oder ändern.(for/while-schleife in php)

                    zu deinem admin-tool: das ganze über ne while schleife ziehen, darin je einen befehlssatz ausgeben und via mysql_num_rows() o.ä. prüfen, ob ein datensatz für die prozessor_id mit der befehlssatz_id vorhanden ist und dann deiner checkbox halt nen selected o.ä. anhängen.
                    Karteikasten
                    "Es gibt auch Linux-Aussteiger. Aber die Rückfallquote steigt mit jeder Win-Version." - Walter Saner in de.newusers.questions

                    Kommentar


                    • #11
                      1. Möglichkeit, Drei Tabellen
                      Wenn ich das nach dem Drei-Tabellen-Prinzip mache, so habe ich doch für einen Prozessor mehrere Einträge:

                      id_prozessor, id_befehl
                      ----------------------
                      1, 1
                      1, 2
                      1, 3
                      2, 1
                      2, 2
                      2, 3
                      2, 4
                      3, 1
                      3, 2
                      usw....
                      Ist das nicht unsauber? Bei den einzelnen Checkboxen müsste ich dann was basteln wie if (id_prozessor = '1' AND id_befehl = '2') {echo ' checked'}.

                      Müsste funzen, aber meine Frage war auf die 2. Möglichkeit bezogen:

                      2. Möglichkeit, Zwei Tabellen, Datentyp SET
                      SET speichert bekanntlich die Werte intern als Binärzahlen und je nach Kombination der Werte steht intern etwas wie 0110. Und das mit Formularen auszulesen und zu verwerten sehe ich als kompliziert an.

                      Daher meine Frage: macht der eigentlich optimal passende Datentyp SET Sinn bei diesem Einsatzzeck?

                      Kommentar

                      Lädt...
                      X