Increment ohne Autoincrement (Update-anweisung)

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

  • Increment ohne Autoincrement (Update-anweisung)

    Hi,

    hab ein kleines aber feines problem

    ich bin jetzt endlich mit meiner Bildergallerie fertig... bis auf eins:
    wenn ich mehere Bilder von einer Gallerie in die andere verschiebe, treten Lücken bei den Positionsangaben der Ursprungsgallerie auf.
    Ich kann nämlich die Bilder in der Reihenvolge verschieben immer mit +1 bzw mit -1 ... also die positionen von 2 Bildern vertauschen....

    damit das nach dem Verschieben genausogut funzt, muß ich also die Positionsnummern neu vergeben.... doch....

    mysql_query("SELECT @pos:=1");
    mysql_query("UPDATE $picstbl SET pos=@pos++ WHERE gid=$gid ORDER BY pos");

    ... funzt nicht ... ich weiß das kann mit dem Syntax gar nicht gehen....

    hätte da jemand eine Idee, wie ich das ohne php-while-schleifen hinkriege?
    (hab schon genug whileschleifen und queries drinnen *grmpf*)

    Thanks

  • #2
    Code:
    SET @pos := 0;
    UPDATE comments SET opinion = (@pos := @pos + 1);
    funktioniert aber nicht immer einwandfrei, weil es da ja auch noch einen Key gibt und du da ja noch ein ORDER BY drin haben willst. Ggf. musst du die komplette Tabelle locken, den Key entfernen, die beiden obigen Queries ausführen, den Key wieder anlegen und die Tabelle unlocken, damit du 100%tig sicher sein kannst, dass es immer einwandfrei funktioniert.

    Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

    bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
    Wie man Fragen richtig stellt

    Kommentar


    • #3
      .... du wirst lachen....

      mysql_query("SET @pos := 0");
      mysql_query("UPDATE $picstbl SET pos = (@pos := @pos + 1) WHERE gid='$gid' ORDER BY pos");

      funktioniert einwandfrei .... also das

      PHP-Code:
              $posx=0;
              
      $db mysql_query("SELECT id FROM $picstbl WHERE gid='$gid' ORDER BY pos ");
              while(
      $data=mysql_fetch_row($db)){
                  
      $posx++;
                  
      mysql_query("UPDATE $picstbl SET pos=$posx WHERE id=".$data[0]." LIMIT 1");
              } 
      ..... kann ich mir sparen ... wäre ja auch wirklich idotisch viel Script-/Rechenleistung-Aufwand um dieses simple autoincrement


      DANKE!!!!!!!!!!!!!!

      Kommentar


      • #4
        Du solltest aber bedenken, dass das eventuell viele andere Sachen crasht. Man bedenke ein Forum, wenn da ein Thread gelöscht wird und alle eins runter rücken, kann ich mir einen Link alla
        www.domain.de/forum/thread.php?id=10
        relativ schnell in die Haare schmieren, weil das immer auf einen anderen zeigt.
        Eventuell solltest du lieber dein Verschieben überarbeiten, als die Identifier (ich benutze das Wort mit Absicht!) zu ändern

        Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

        bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
        Wie man Fragen richtig stellt

        Kommentar


        • #5
          wenn du ein bild verschiebst, dann kennst du auch seine
          "pos" sagen wir $pos und "gid"
          warum machst du einfach
          UPDATE $picstbl SET pos=pos+1 WHERE gid='$gid' and pos>$pos
          bei einfügen
          und
          UPDATE $picstbl SET pos=pos-1 WHERE gid='$gid' and pos>$pos
          bei rausnehmen nicht?
          Slava
          bituniverse.com

          Kommentar


          • #6
            Original geschrieben von ghostgambler
            Du solltest aber bedenken, dass das eventuell viele andere Sachen crasht. Man bedenke ein Forum, wenn da ein Thread gelöscht wird und alle eins runter rücken, kann ich mir einen Link alla
            www.domain.de/forum/thread.php?id=10
            relativ schnell in die Haare schmieren, weil das immer auf einen anderen zeigt.
            Eventuell solltest du lieber dein Verschieben überarbeiten, als die Identifier (ich benutze das Wort mit Absicht!) zu ändern
            1) .... das ist kein Forum, sondern ne Bildergallerie ....
            2) .... das ist die positionsangabe nach der sortiert wird , nicht die ID der Bilder, die als primarykey also als Identifier definiert ist, und egal in welche gallerie ich die Bilder verschiebe gleich bleibt
            ... nen Link über die positionsangabe ? *neenee*

            (obwohl es bei der Bildergallerie auch nichts machen würde, weil ein Link, der nicht von diesem Script erzeugt wurde, wird sowieso nach einer halben Stunde ungültig ... => hotlink-protection )


            wenn du ein bild verschiebst, dann kennst du auch seine
            "pos" sagen wir $pos und "gid"
            warum machst du einfach
            UPDATE $picstbl SET pos=pos+1 WHERE gid='$gid' and pos>$pos
            bei einfügen
            und
            UPDATE $picstbl SET pos=pos-1 WHERE gid='$gid' and pos>$pos
            bei rausnehmen nicht?

            wie in meiner Fragestellung gesagt .... ich kann mehere(!!!) Bilder auf einmal verschieben....
            ( indem ich einfach ein Hackerl bei der checkbox mache )

            1) in der Zielgallerie wird die höchste postion abgefragt und dann die bilder ind er Datenbank mit $pos++ upgedated ... also ans Ende angefügt (ebenso wird die Gallerieid mit der gid der Zielgallerie überschreiben und die Bilder einzeln in den Ordner der Zielgallerie verschoben ... Namens-kollisionen sind ausgeschlossen)


            2) dadurch können solche Lücken in der "Quellgallerie" auftreten:

            pos:
            1
            2
            3
            4

            8

            10
            11
            12

            18
            19
            .....

            ... das sind 9 verschobene Bilder...
            angenommen nach der position 18 sind noch 100 Bilder:
            wenn deine Version verwende muß ich die Positionsangaben nach jedem einzelnen Bild updaten .... sind das mehr als 100 Bilder bei denen ich je 9 mal die Positionsangaben im selben Programmdurchlauf überschreiben müßte ... *neenee* genau das will ich vermeiden

            (ne Ergänzung daß ich Bilder vor der 1ten Lücke nicht updaten muß, hab ich schon gemacht)


            .... hab mir schon Gedanken darüber gemacht, wie und warum ich das mache ... mir gings nur um das autoincrement in der updateklausel und vorheriger Sortierung ... was das einzige Fragezeichen war, aber auch ohne mysql durch php lösbar

            trotzdem Danke für eure gutgemeinten Vorschläge
            Zuletzt geändert von seekworld; 03.07.2006, 18:03.

            Kommentar


            • #7
              Original geschrieben von seekworld
              (obwohl es bei der Bildergallerie auch nichts machen würde, weil ein Link, der nicht von diesem Script erzeugt wurde, wird sowieso nach einer halben Stunde ungültig ... => hotlink-protection )
              Ist das wirklich nötig?
              Du nimmst Usern die Möglichkeit Links zu tauschen, um nicht zu sagen, du machst ein Feature des Internets kaputt.
              Unterbindung von Hotlinking ist eigentlich fast nie sinnvoll (abgesehen von Inhalten wo man Geld für bezahlen muss) ... da würd ich auch nochmal drüber überlegen ^_-

              Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

              bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
              Wie man Fragen richtig stellt

              Kommentar


              • #8
                Ja, das ist nötig

                Meine Seite hatte in ihren Anfängen nur 1GB traffic .... mit dem kam ich so recht und schlecht aus .... bis ... ja bis September lletzten Jahres .... da bekam ich eine Trafficwarnung bereits am 4. des Monats...
                der Grund? ein Forum hatte gleich ein paar Bilder gehotlinked... nicht als textlink, sondern in voller Größe eingebunden.
                Bitten die zu entfernen: natürlich haben sie das nicht gemacht....

                Mein host gab mir damals mehr traffic..., aber für meine Besucher hatte das trotzdem die Konseqenzen, daß die Bilder eine Zeit lang nicht da waren .... eben bis ich das hotlink-script fertig hatte ... sonst wären die 2GB auch weg gewesen.......

                das war der Grund warum ich sie erstellt habe...



                und jetzt bin ich ein beliebtes Ziel von Raubzügen von "Webseitenbetreibern" ...
                Einer war sogar so dreist und hatte nicht nur die Biographie und einen Teil meiner Bilder gestohlen, sondern auch den Inhalt meiner Links/affiliatssetite. .... Auf die Bitte die Inhalte zu entfernen hat er promt noch mehr Bilder raufgeladen ..... (hat jetzt Hausverbot)

                Ein anderer hat die Biographie gestohlen, und meine gesamten Audioclips gehotlinkt (die sind noch nicht geschützt) .... der hat das allerdings auf meine Bitte entfernt.


                ..... für deren Seiten bezahle ich meinen Traffic ehrlichgesgt nicht!!!!!!!
                für einen MSN-Chat reicht die halbe Stunde, für Foren gibts ja auch Imageshack, und wie sie alle heißen, wo man die Bilder raufladen kann...

                ....... und außerdem schadet es ja auch nicht, sich meine gesamte Seite anzuschauen .... dessen Link die User ja auch weiterhin tauschen können

                Kommentar


                • #9
                  was bietest du auf deiner Website denn so tolles an, dass du 1. 1GB an Traffic hast (den hab ich auf einer Website, aber das ist eine FANART-Gallery, d.h. praktisch NUR Bilder) und 2. jeder deinen Content klaut? Oo,

                  Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                  bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                  Wie man Fragen richtig stellt

                  Kommentar


                  • #10
                    eine Fanseite .... mit aktuell 120 Bildern jpg 90% ... die 2,5GB traffic verursachten ... in den letzten 3 1/2 Monaten hatte ich mehr als 30.000 clicks auf 'meine' Bilder, obwohl ich sie seit nem halben Jahr nich upgedated habe... (das wird sich durch die neue Gallerie bald ändern) ...

                    und warum jeder meinen content klaut meine Seite ist zwar klein, aber dennoch die größte und beste auf dem Gebiet.... und ich habe die einzige ausführliche Biographie....
                    für 12jährgige möchtegern-Webdesigner ist das schon verlockend...

                    waren bisher 4 von denen ich weiß, daß sie massiev geklaut haben ...

                    PS: die Sängerin hat auch Bilder (nur die Thumbs ..???) von meiner Seite geklaut und hat sie auf ihren myspace-account hochgeladen ... (die darf das aber)

                    Kommentar

                    Lädt...
                    X