[MySQL 4.0] Problemchen mit UPDATE und JOIN + GrOUP BY

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

  • [MySQL 4.0] Problemchen mit UPDATE und JOIN + GrOUP BY

    Also ... wie immer Thema Forensoftware

    Folgende Problemstellung: beim verstecken eines Threads muß ich den Zähler für die Postings der einzelnen User reduzieren .... wenn ein user 3 postings in dem Thread hat um 3 wenns nur eines ist um 1

    Diese Abfrage:

    UPDATE u_tbl AS u RIGHT JOIN fp_tbl AS p USING ( userid ) SET u.posts = u.posts - count(*) WHERE p.tid =2 && p.pchanges >0 GROUP BY p.userid

    wäre zu schön um wahr zu sein .... das Group By schmeckt ihm nicht so ganz *grmpf* ....

    leider fällt mir sonst, außer einer WHILE -Schleife oder 2 subqueries mit ein und der selben WHERE Bedingung nix ein euch vielleicht???

  • #2
    .... das Group By schmeckt ihm nicht so ganz
    wundert dich das? http://dev.mysql.com/doc/refman/5.1/en/update.html

    Kommentar


    • #3
      ICH WEISS!!! ... hättest du 7 Wörter vorher zu lesen begonnen .....


      Meine Frage war nur ob jemand eine einfache Lösung für diese Operation hat, die das bewirkt was mit dem GROUP by nicht geht ...

      Ich hab das jetzt so gelöst.....

      mysql_query("CREATE TEMPORARAY TABLE tbl_tmp (userid SMALLINT UNSIGNED, cnt SMALLINT UNSIGNED)");
      mysql_query("INSERT INTO tbl_tmp SELECT userid, count(*) FROM fp_tbl WHERE tid = $tid && pchanges>0 GROUP BY userid ");

      mysql_query("UPDATE u_tbl AS u RIGHT JOIN tbl_tmp AS p USING ( userid ) SET u.posts = u.posts $act p.cnt WHERE p.userid>0");
      mysql_query("DROP TABLE tbl_tmp");



      .... aber das kanns doch nicht sein, daß man so viel Aufwand für diese einfache operation betreiben muß ... => hat jemand eine einfachere Lösung ?
      Zuletzt geändert von seekworld; 23.01.2007, 07:29.

      Kommentar


      • #4
        Na ja, die Anzahl abzuziehender Posts sollte sich doch irgendwie mit einem Subselect ermitteln lassen ...
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5
          Hätte ich auch probiert

          die Auswahl der user die verändert werden müssen ist ja noch relatiev einfach mit Group by und any


          UPDATE u_tbl SET posts=posts-(???) WHERE userid ANY (SELECT userid FROM fp_tbl WHERE tid = $tid && pchanges>0 GROUP BY userid)


          ..... die Frage ist dann nur ... wie weiß mysql welche userid ich gerade bearbeite? soviel ich weiß ... mehr als eine Zeile bei (???) darf ja nicht zurückgegeben werden => noch eine Verschachtelung

          =>

          UPDATE u_tbl SET posts=posts-(SELECT count(*) FROM fp_tbl WHERE tid = $tid && pchanges>0 && userid ANY (SELECT userid FROM fp_tbl WHERE tid = $tid && pchanges>0 GROUP BY userid) GROUP BY userid) WHERE userid ANY (SELECT userid FROM fp_tbl WHERE tid = $tid && pchanges>0 GROUP BY userid)

          (hab diese Query nicht ausprobiert )


          UPDATE u_tbl SET posts=posts-@cnt WHERE userid ANY (SELECT userid , @cnt:=count(*) FROM fp_tbl WHERE tid = $tid && pchanges>0 GROUP BY userid)

          .... geht ja leider auch nicht ...

          Kommentar

          Lädt...
          X