Announcement

Collapse
No announcement yet.

Nach Random Select Delete verwenden

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Nach Random Select Delete verwenden

    Ich habe folgendes Problem:

    PHP Code:
    $query_Recordset3 "INSERT INTO `user_list_player1` (user_name) SELECT * FROM `user` ORDER BY RAND() LIMIT 1";
    $Recordset3 mysql_query($query_Recordset3$db0004) or die(mysql_error());
    $row_Recordset3 mysql_fetch_assoc($Recordset3);
    $totalRows_Recordset3 mysql_num_rows($Recordset3); 
    Wie man sieht kopiere ich damit den Inhalt in eine andere Tabelle. Jetzt möchte ich aber, dass das, was kopiert wurde gelöscht wird aus der uhrsprungstabelle. Wie mach ich das?

  • #2
    Hallo,

    ich kann mir keine Konstruktion vorstellen, die das leistet. Der einzige Weg dürfte eine StoredProcedure bzw. ein ExecuteBlock o.ä. sein. Dazu müssten wir aber das DBMS kennen, weil die SQL-Dialekte in dieser Hinsicht sehr unterschiedlich arbeiten; dazu könntest du die Frage im richtigen Unterforum stellen.

    Jürgen

    Comment


    • #3
      Nach dem Kopiervorgang:

      delete from test where test.spalte=(select spalte from test1 ORDER BY RAND() LIMIT 1);
      Zuletzt editiert von mtth; 14.01.2010, 00:51.

      Comment


      • #4
        Originally posted by Jürgen Thomas View Post
        Hallo,

        Dazu müssten wir aber das DBMS kennen, weil die SQL-Dialekte in dieser Hinsicht sehr unterschiedlich arbeiten; dazu könntest du die Frage im richtigen Unterforum stellen.

        Jürgen
        Na ja, wenn ich das Codefragment so überfliege, sieht es schwer nach MYSQL aus und dann wäre er ja hier richtig :-)

        Gruss

        Comment


        • #5
          Wäre gut, man machte sich auch hier die Mühe eines Minimalbeispiels.


          connect test;
          drop table if exists <user>;
          create table <user>(spalte1 typ,spalte2 typ,...);
          insert into table <user> values('spalte1','spalte2',...);
          insert into table <user> values('spalte1','spalte2',...)
          insert into table <user> values('spalte1','spalte2',...)

          eigene Operationen, welche die Frage aufwerfen



          <user> ist eine Kombination aus 4 Buchstaben.

          Comment


          • #6
            Hallo,
            Originally posted by mtth View Post
            Nach dem Kopiervorgang:

            delete from test where test.spalte=(select spalte from test1 ORDER BY RAND() LIMIT 1);
            damit das funktioniert muß man die Funktion RAND() jedoch jeweils mit einem konstanten Parameter aufrufen. Ansonsten wird die Liste immer unterschiedlich sortiert und damit nicht der gerade eingefügte Wert gelöscht.
            [highlight=sql]
            INSERT INTO ... ORDER BY RAND(1) LIMIT 1
            ...
            DELETE FROM ... ORDER BY RAND(1) LIMIT 1
            [/highlight]

            Besser wäre es jedoch sich nicht auf RAND() zu verlassen und stattdessen die Anweisungen explizit zu machen:

            [highlight=sql]
            SELECT <pk> FROM <tabelle1>
            ORDER BY RAND()
            LIMIT 1 into @transferPK;

            INSERT INTO <tabelle2> (feld1, ...)
            SELECT * FROM <tabelle1> where <pk> = @transferPK;

            delete from <tabelle1> where <pk> = @transferPK;
            [/highlight]

            Gruß Falk
            Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

            Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

            Comment


            • #7
              Originally posted by dbwizard View Post
              Na ja, wenn ich das Codefragment so überfliege, sieht es schwer nach MYSQL aus und dann wäre er ja hier richtig :-)
              Stimmt, die mysql-Funktionen hatte ich nicht mehr gelesen. Aber zuerst war die Frage im allgemeinen SQL-Forum gestellt worden; sie erst zwischen meiner und deiner Antwort verschoben worden. Jürgen

              Comment


              • #8
                Originally posted by Jürgen Thomas View Post
                ...ie erst zwischen meiner und deiner Antwort verschoben worden.
                ...ich war so frei
                Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

                Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

                Comment


                • #9
                  INSERT INTO `user_list_player1` (user_name) SELECT * FROM `user` ORDER BY RAND() LIMIT 1
                  So ganz verstehe ich den Sinn dieser Abfrage doch nicht.

                  Per random irgendwelche Datensätze kopieren, ganz ohne where Bedingung, und dann alle kopierten Datensätze löschen?

                  Wozu dient das?

                  Comment

                  Working...
                  X