Array Speichern ?!

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

  • Array Speichern ?!

    Kann man einen array so in einer datenbank speichern ?

    PHP-Code:
    $a = array ('test' => "test"'test2' => "test");

    $sql "insert into `blabla` (id,antworten) values('.$id.','.$a.')";
    ...
    ...
    ... 
    ?
    PHP-Code:
    return 0+$i

  • #2
    wenn ja wie kann man das ganze wieder auslesen ?
    PHP-Code:
    return 0+$i

    Kommentar


    • #3
      nein, so nicht, schau dir serialize mal an

      Kommentar


      • #4
        ich verstehe das nicht !
        hat mal einer ein einfaches beispiel !?
        PHP-Code:
        return 0+$i

        Kommentar


        • #5
          Original geschrieben von ripper
          ich verstehe das nicht !
          *seufz*

          was gibt es daran denn jetzt schon wieder nicht zu verstehen?

          serialize wandelt ein array in einen einfachen textstring um, und den kann man ohne jedes weitere problem in der datenbank speichern.
          I don't believe in rebirth. Actually, I never did in my whole lives.

          Kommentar


          • #6
            ...das hab ich ja auch hinbekommen. Meine Frage ist eher, ob und wenn wie man einen bestimmten Wert oder mehrere bestimmte Werte dieses so gespeicherten Arrays per SQL abfragen kann, aber ich befürchte das funktioniert gar nicht und man muß die Werte alle in separaten Feldern speichern. Oder hat jemand ne bessere Idee?

            Kommentar


            • #7
              normalisieren.

              edit: auch wenns schwerfällt.
              Die Zeit hat ihre Kinder längst gefressen

              Kommentar


              • #8
                Damit ist mir doch noch nicht geholfen, oder? Also mein Problem, jeder Datensatz hat sagen wir mal rund 100 Ausprägungen und das bei 5 Variablen, wobeim sowohl eine als auch n Ausprägungen möglich sein können. Diese in ein Array zu bringen und dies zu normalisieren und dann abzuspeichern ist ja kein Problem, aber kann man auf einzelne Eigenschaften per SELECT noch irgendwie zugreifen (ausser über die unperformante %Eigenschaft% Variante)?

                Kommentar


                • #9
                  Original geschrieben von Friedward74
                  Diese in ein Array zu bringen und dies zu normalisieren und dann abzuspeichern ist ja kein Problem
                  Normalisiere deine Datenbank, nicht den Array! Dann klappts auch.
                  Als Anregung: Es gibt keinen Datensatz mit x verschiedenen Ausprägungen sondern x Datensätze mit jeweils einer Ausprägung.

                  Kommentar


                  • #10
                    Das heißt also, ich muß für jedes Array/jede Variablengruppe (z.B. Interessen, präferierte Musikrichtungen) eine eigene Tabelle anlegen, die ich dann mit der Haupt-User-Tabelle Joine. Stimmt´s?

                    Das ergibt bei 100.000 Datensätzen mit in jeder Variablengruppe durchschnittlich 7 Eigenschaften. Tabellen mit jeweils 700.000 Datensätzen. Sind JOINS über mehrere Variablengruppen da überhaupt noch performant genug?

                    Kommentar


                    • #11
                      Bisher weiß doch keiner was du vorhast!

                      Wie sieht dein DB-Schema zur Zeit aus?
                      Welchen Teil der Realität (hm die Formulierung gefällt mir ) willst du abbilden?

                      Kommentar


                      • #12
                        Alllllllllsooo:

                        Das ganze Schema zu erläutern macht glaub ich keinen Sinn, da die meisten Tabellen mit diesem Thema nichts zu tun haben. Ich verwalte eine Singlecommunity. Bis auf diverse Untertabellen zu Favoriten, Mails etc. werden die meisten Mitgliedsdaten in der Tabelle user verwaltet. Hier gibt es zur Zeit diverse Werte die bisher noch in einem Feld abgespeichert werden z.B. ich suche (Single, verheiratet ODER verwitwet, etc.), Interessen (Sport, Fernsehen, Lesen, ODER etc.). Bisher ist es noch so, dass man aus jeder dieser Kategorien nur einen Wert auswählen kann. Das paßt zwar schön in die DB-Tabelle und ist auch nett abfragbar, aber hier macht es natürlich Sinn, auch mehrere Werte auswählbar zu machen. Die Werte sind alle mit Zahlen hinterlegt, die übersetzt werden (z.B. 1=Sport, 2=Lesen etc.), um die DB-Größe minimal zu halten.

                        Ich überlege jetzt, wie genau ich solche Werte am Besten in der Datenbank ablege, ob ich das weiter in der Mitgliedertabelle (user) mache, oder ob ich für jede der Kategorien (ich suche, Interessen, etc.) eine Untertabelle ablege. Für eine einfache Anzeige wäre wohl die Variante das Array in einem Feld abzuspeichern (mit serialize) am geeignetsten, allerdings läßt sich das dann z.B. bei einer Suche nach Mitgliedern, die bestimmte Interessen haben, wohl nicht mehr abfragen. Alternativ habe ich halt überlegt, ob es Sinn macht für jede dieser Kategorien eine Untertabelle anzulegen. Die macht die DB und die Abfragestruktur natürlich gleich deutlich komplexer, da ich dann gleich 10 Untertabellen anlegen müßte.

                        Kommentar


                        • #13
                          Original geschrieben von Friedward74
                          Ich überlege jetzt, wie genau ich solche Werte am Besten in der Datenbank ablege, ob ich das weiter in der Mitgliedertabelle (user) mache, oder ob ich für jede der Kategorien (ich suche, Interessen, etc.) eine Untertabelle ablege.
                          für jede wäre sicher auch blödsinn - aber eine extra tabelle für alle diese auswahlmöglichkeiten wäre u.U. denkbar.
                          UserID | Merkmal-Id | Ausprägung

                          Für eine einfache Anzeige wäre wohl die Variante das Array in einem Feld abzuspeichern (mit serialize) am geeignetsten, allerdings läßt sich das dann z.B. bei einer Suche nach Mitgliedern, die bestimmte Interessen haben, wohl nicht mehr abfragen.
                          [ ] du kennst ENUM/SET
                          I don't believe in rebirth. Actually, I never did in my whole lives.

                          Kommentar


                          • #14
                            für jede wäre sicher auch blödsinn - aber eine extra tabelle für alle diese auswahlmöglichkeiten wäre u.U. denkbar.
                            UserID | Merkmal-Id | Ausprägung
                            Stimmt, momentan hält sich die Anzahl der Ausprägungen noch in Grenzen, aber langfristig könnte man die natürlich auch abspeichern. Aber das war ja auch nicht mein eigentliches Problem.


                            du kennst ENUM/SET
                            Nein, bisher noch nicht. Aber das sieht mir nach ner guten Lösung aus.
                            In meinem Fall wird es wohl die SET-Variante werden.
                            Zuletzt geändert von Friedward74; 14.06.2005, 15:38.

                            Kommentar


                            • #15
                              Das mit SET funktioniert zumindest mit dem speichern echt Klasse. Danke nochmal für den Tip. Allerdings hab ich noch ne Frage. Wie fragt man mehrere Werte in nem Set denn am geschicktesten ab. Bei einem funktioniert´s ja so:

                              PHP-Code:
                              mysqlSELECT FROM tbl_name WHERE FIND_IN_SET('value',set_col)>0;
                              mysqlSELECT FROM tbl_name WHERE set_col LIKE '%value%'
                              Muß ich das FIND_IN_SET() für jeden gesuchten Wert wiederholen, oder gibt es auch die Möglichkeit, mehrere Werte gemeinsam abzufragen (wie bei dem " FIELD IN ('1','2','3') )?

                              Desweiteren ist das natürlich auch eine Performancefrage. Ich hab nämlich 2 SETs die recht häufig abgefragt werden müssen. Bei den anderen ist das hingegen (voraussichtlich) eher selten der Fall. Oder sollte ich bei den 2 SETs doch lieber auf separate Tabellen und JOINs ausweichen?

                              Kommentar

                              Lädt...
                              X