mysql string verändern

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

  • mysql string verändern

    Hallo Leute,

    Also ich habe eine tabelle mit einer spalte Friendstring.
    In der spalte friendstring befindet sich ein string der so aussieht: 4,37,23,45,77,53,........

    außerdem habe ich ein array das so aussieht: $del = array("37","77");

    nun möchte ich gerne diese zwei werte aus dem array aus dem string in der mysql db löschen.

    welche möglichkeit gibt es dafür?

    danke im voraus,

    mfg tom

  • #2
    welche möglichkeit gibt es dafür?
    in erster linie - normalisierung der datenbank.[*]

    in diesem vermurksten fall - datensatz auslesen, mit explode in ein array verwandeln, array_diff() zur mengen-differenz benutzen, wieder implode() und zurück in die db schreiben.

    deswegen lieber[*].

    Kommentar


    • #3
      ok, danke habs verstanden.

      aber was tut das zur sache, ob ich "SELECT *..." oder "SELECT Friendstring..." aus der datenbank hol?

      mfg tom

      Kommentar


      • #4
        was hat das damit zu tun?

        Kommentar


        • #5
          was meinst du dann mit normalisieren der datenbank?

          Kommentar


          • #6
            ich meine das, was dieser begriff bedeutet.

            Kommentar


            • #7
              ok,

              und was meinst du dann genau mit NORMALISIEREN?

              danke

              Kommentar


              • #8

                Kommentar


                • #9
                  ok, aber wozu sollte ich die datenbank in diesem fall normalisieren?

                  ich denke das es von der performance so besser sein müsste, als hunder hundertausend zeilen zu haben?

                  oder lieg ich da falsch?

                  Kommentar


                  • #10
                    Original geschrieben von tomtitom
                    ich denke das es von der performance so besser sein müsste, als hunder hundertausend zeilen zu haben?
                    warum denkst du das? und was heißt "von der performance so besser"? gibt es konkrete zahlen? vor allem im bezug auf die geplante last.

                    Kommentar


                    • #11
                      also, nehmen wir mal an auf der seite befinden sich 100 registrierte leute, jeder user hat eine einteutige ID in der tabelle "user".


                      angenomen jeder user hat jeden anderen user als freund gewählt, dann befinden sich in der tabelle "user_friends" 100x100 = 10000 zeilen.

                      wenn ich das anders mache, und in der tabelle "user" eine spalte mit "user_friendstring" anlege, dann kommt keine einzige zeille hinzu.
                      In der spalte "user_friendstring" befinden sich die ID's der Freunde.

                      ich kann also die tabelle "user_friends" ganz weglassen, und somit spare ich mir 10000 Zeilen.

                      Was ist etzt besser, und besser von der leistung her?

                      danke

                      mfg tom

                      Kommentar


                      • #12
                        Kurz nebenbei:

                        Wenn du 100 Leute hast, dann kann jeder doch wohl maximal 99 Freunde haben - dass ich mein eigener Freund bin, sollte man als trivial voraussetzen können. Dafür braucht man keinen Datensatz.

                        Weiterhin könnte man hinterfragen: Kann ich einen Freund hinzufügen ohne dass der andere mich auch hinzufügt? Wenn nein, fliegt schonmal die Hälfte aller Datensätze raus.

                        Wenn ja, könnte man sich überlegen zB eine Spalte zu machen um dort zu markieren, dass doch beide sich als Freunde drinne haben. Dann braucht man für doppelte Freundschaften trotzdem nur einen Datensatz.

                        (Im folgenden wird der Einfachheit halber von 100 Freunden ausgegangen: )
                        Man hätte dann übrigens nach der Gauß'schen Summenformel (n*(n+1))/2, in deinem Falle also (100^2+100)/2 = 5050 Datensätze. Das ist für eine Datenbank eine eher kleine Zahl, denn Datenbanken sind auf große Datenmengen ausgelegt (heißen ja deshalb auch Datenbanken). Ob du aber zB mittels der SQL-Funktion "FIELD_IN_SET" arbeitest, kann ich dir nicht sagen, weil ich selber nicht weiß was du vorhast. Ich persönlich kann von dieser Möglichkeit aber eher abraten.
                        Für alle die Fehler suchen, gibts gratis tolle Debuggingmöglichkeiten:
                        var_dump(), print_r(), debug_backtrace und echo.
                        Außerdem gibt es für unsere Neueinsteiger ein hervorragendes PHP Tutorial zu PHP 4 und PHP 5 (OOP)
                        Es heißt $array['index'] und nicht $array[index]! Und nein, das ist nicht egal!
                        Dieses Thema lesen, um Ärger im Forum und verzögerte Hilfen zu vermeiden.

                        Kommentar


                        • #13
                          Besser vom Datenmodell her ist natürlich die weiter normalisierte Lösung.
                          Du kannst leichter über eine 1:n-Beziehung suchen, als wenn du alle diese "n" in einem String abgelegt hast - da hilft dir ein Index auf der Spalte dann auch kaum noch weiter, wenn also Mal bspw. ermittelt werden soll, welche anderen User alle User X als Freund eingetragen haben, läuft das im Zweifelsfalle auf ein Durchgehen der kompletten User-Tabelle und Stringvergleich bei jedem Datensatz hinaus.


                          Von der Performance her kann es allerdings ab einem bestimmten Punkt günstiger sein, die Normalisierung nicht so weit zu treiben.
                          Bspw. die "social networks" bzw. "Web 2.0"-Dienste wie flickr, delicious, youtube mit ihren "Tags" bauen auf weniger weit normalisierten Datenmodellen auf, weil diese sich effektiver verwalten und vor allem auch skalieren lassen; und halten die Daten teilweise sogar bewusst (mehrfach) redundant vor, einfach um im Gegenzug bessere Performance rausholen zu können. Beschreibungen der Datenmodelle und Algorithmen von flickr gibt's irgendwo im WWW im PDF-Format.
                          I don't believe in rebirth. Actually, I never did in my whole lives.

                          Kommentar


                          • #14
                            ich kann also die tabelle "user_friends" ganz weglassen, und somit spare ich mir 10000 Zeilen
                            Hast dann aber einen String mit 10000 "Stellen", den du wahrscheinlich nicht mehr mit MySql Fkt durchsuchen kannst und damit auf PHP zurückgreifen musst. Ob das dann wirklich viel schneller sein soll

                            Gruss

                            tobi
                            Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                            [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                            Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                            Kommentar

                            Lädt...
                            X