Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Wie mach ich am geschicktesten die Abfrage

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Wie mach ich am geschicktesten die Abfrage

    Ich habe eine Datenbank, mit vielen Spalten in der zeile filename.

    Mittels
    PHP-Code:
    $sql 'UPDATE numbers 
              SET message = "'
    .$text.'" 
              WHERE filename = "'
    .$filename.'"';

    $res mysql_query($sql); 
    Kann ich wunderbar alle Einträge mit dem selben Text versehen.

    Wie kann ich (vielleicht mit einer Schleife?) meine Datenbank mit zufälligen Text aus dem (dann) $text (Array) befüllen?


  • #2
    Ganz einfach: Lass eine Variable hochzählen...

    PHP-Code:
    $text = array("","Text1","Text2",...);

    $i 2// Anzahl der Texte
    while($i 0)
         {
         
    $sql 'UPDATE numbers 
                 SET message = "'
    .$text[$i].'"
                 WHERE filename = "'
    .$filename.'"';
         
    $res mysql_query($sql);
         
    $i--;
         } 

    Kommentar


    • #3
      Entschuldige, ich habe ohne zu überlegen einfach drauf zugeschrieben...
      Es gibt natürlich noch eine besser und einfachere Lösung:
      PHP-Code:
      $text = array("Text1","Text2");

          foreach (
      $text as $key) {
              
      $sql 'UPDATE numbers 
                      SET message = "'
      .$key.'"
                      WHERE filename = "'
      .$filename.'"';
              
      $res mysql_query($sql);
          } 

      Kommentar


      • #4
        Und um einen zufälligen Eintrag zu erhalten, mischtest du einfach zuerst mal den Array:
        PHP-Code:
        shuffle($texte);    // Array mischen
        foreach ($texte as $text) {
            
        $sql "
                UPDATE 
                    numbers 
                SET 
                    message = '
        $text'
                WHERE 
                    filename = '
        $filename'";
            
        $res mysql_query($sql) or exit(mysql_error());

        [Edit]
        Falls du auch mehrere mal den gleichen Eintrag ermöglichen möchtest, musst du das Array innerhalb der Schleife jedesmal neu mischen.
        Gruss
        L

        Kommentar


        • #5
          WOW

          Vielein Dank für die schnellen und vielen Antworten.

          Also:
          Den Beitrag von dex hab ich gestern Abend noch gelesen, und mir die ganze Nacht überlegt, ob es nicht noch eine Möglichkeit gibt, nicht nocheinmal extra abfragen zu müssen, wie viele Elemente ich updaten muss.

          Bei den anderen beiden Lösungen:

          Ich weiss leider weder wieviele Einträge ich insgesamt updaten muss, und und weiss auch nicht wieviele texte in meinem Array drinnen stehen. Das soll der Benutzer später frei wählen können.

          Müsste ich wohl auf dex's erste Lösung zurückgreifen?


          P.S: Es kann natürlich auch sein, das ich lazydogs code nicht checke,
          aber diese foreach läuft doch nur so lange, wie viele Einträge ich in meinem $texte Array habe, und nicht wieviele Einträge mit $filename es gibt. Oder versteh ich was falsch?

          Kommentar


          • #6
            Was genau möchtest du denn jetzt?

            Es gibt mehrere Einträge die den SELBEN filename haben? Und da möchtest du ALLE Einträge mit EINEM Text aus dem Array überschreiben? Oder was möchtest du genau, ich kann deinen Wunsch nicht aus deiner Fragestellung entnehmen.

            Kommentar


            • #7
              wenn der nutzer das später selber frei wählen kann, kann gib ihm doch einfach ein formular mit einem input type, da trägt er ein wieviele texte er updaten will. Den Value davon übergibst du als variable an die schleife. Die schleife läuft nun solange wie der eingegebene wert vom benutzer ist.

              Aber je nachdem wie ich deine frage hier verstehe ist es doch eher so das der benutzer die texte eingibt oder? wenn du jeden text dann ins array packst, hast du am ende ein gesamtarray mit der länge aller texte die der benutzer eingegeben hat. Das array kannst du dann mit der foreach schleife durchlaufen wie dex es beschrieben hat und updatest dabei einfach.

              Oder habe ich deine frage falsch verstanden?

              Kommentar


              • #8
                Zitat von Multiplex Beitrag anzeigen
                P.S: Es kann natürlich auch sein, das ich lazydogs code nicht checke,
                aber diese foreach läuft doch nur so lange, wie viele Einträge ich in meinem $texte Array habe, und nicht wieviele Einträge mit $filename es gibt. Oder versteh ich was falsch?
                Es ist ja der gleiche Code wie der von dex ausser dem shuffle() und dem or exit(mysql_error()). Und so wie ich es jetzt sehe, sind beide gaga, weil sie zwar so oft laufen, wie Einträge in dem Array sind, aber immer den gleichen Eintrag verändern, da ja der PK ($filname) nicht ändert. Deshalb ist Flor1ans Frage völlig berechtigt.
                Gruss
                L

                Kommentar


                • #9
                  Zitat von lazydog Beitrag anzeigen
                  Es ist ja der gleiche Code wie der von [b]dex[/i] ausser dem shuffle() und dem or exit(mysql_error()). Und so wie ich es jetzt sehe, sind beide gaga, weil sie zwar so oft laufen, wie Einträge in dem Array sind, aber immer den gleichen Eintrag verändern, da ja der PK ($filname) nicht ändert. Deshalb ist Flor1ans Frage völlig berechtigt.

                  upps somit ist meine aussage auch nicht ganz korrekt da ich auf das ändern des $filename nicht drauf eingegangen bin ;( sry somit ist die frage wirklich berechtigt.

                  Kommentar


                  • #10
                    @florian oder auch alle...

                    also:

                    ich habe unter dem selben filenamen mehrere einträge stehen

                    ich möchte nun jedem einzelnen eintrag eine zufällige nummer aus meinem array zuweisen.

                    Anzahl der filenamen ist im normalfall um ein vielfaches größer, als die anzahl der texte aus meinem array, die ich zuordnen will.

                    Z.b. 12 db entrys die man unter dem selben namen finden kann (filename) und 4 texte die ich nun 3 mal durchmischen will.

                    Kommentar


                    • #11
                      Das heisst auch, dass Filename nicht der Primary Key ist. Da bleibt dir nichts anderes übrig, als in einer Schleife den zugehörigen PK (ich nenne ihn hier wie üblich id) zu holen und die Einträge einzeln zu ändern:
                      PHP-Code:
                      $sql "
                          SELECT
                              id
                          FROM
                              numbers
                          WHERE
                              filename = '
                      $filename'";
                      $res mysql_query($sql) or exit(mysql_error());
                      while (list(
                      $id) = mysql_fetch_row($res)){
                          
                      shuffle($texte);
                          
                      $upd "
                              UPDATE
                                  numbers
                              SET
                                  message = '
                      $texte[0]'
                              WHERE
                                  id = 
                      $id";
                          
                      mysql_query($upd) or exit(mysql_error());

                      Jetzt werden alle mit filename = $filename zufällig geändert.
                      Gruss
                      L

                      Kommentar


                      • #12
                        Ok alles klar vielen Dank,
                        ich weiss jetzt auch wo mein Problem war.

                        Die Datenbank war sehr schlecht designed.
                        Kein Primary Key, und auch keine ID in der DB.

                        Nun hab ich das mittels autoincrement und primarykey id gelöst und es klappt.

                        Danke nochmals

                        Kommentar


                        • #13
                          kleiner tipp noch:
                          wenn du ein projekt mit einer datenbank realisierst dann mach dir erstmal gedanken über deine datenbankstruktur, was wird gebraucht, wie bau ich es ein wie setz ich es um usw usw...dann natürlich noch die normalformen beachten und am besten ein diagramm aufzeichen, dann wird alles viel leichter. Habe das leider am eigenen leib erfahren was eine struktur im vornhinein ausmacht.
                          greetz

                          Kommentar


                          • #14
                            OK alles klar, werd ich mir merken.
                            Shame on me, weil ich überhaupt eine DB anlege ohne PK.

                            Kommentar

                            Lädt...
                            X