0
"id"    "type"  "parent"    "country"   "votes" "perCent"
"1"     "1"     "0"         "US"        "0"     "0"
"2"     "2"     "1"         "US"        "0"     "0"//votes = 8 i.e total of id3 votes and id7votes. Both have id=2 as parent, and id=2 is type 2
"3"     "3"     "2"         "US"        "4"     "0"
"7"     "3"     "2"         "US"        "4"     "0"
"19"    "3"     "1"         "US"        "4"     "0"
"4183"  "10"    "3"         "US"        "2"     "0"
"4184"  "10"    "3"         "US"        "2"     "0"
"4185"  "10"    "7"         "US"        "2"     "0"
"4186"  "10"    "7"         "US"        "2"     "0"
"4187"  "10"    "19"        "US"        "2"     "0"
"4188"  "10"    "19"        "US"        "2"     "0"

type=2ID が親である投票の合計でcol を更新しようとしています。私は以下を試してきましたが、これには3つのステートメントが含まれており、結合と複数の選択に非常に遅れているため、どこにも行かないようです。

UPDATE  likesd a
        INNER JOIN
        (
            SELECT  parent, SUM(votes) totalVotes
            FROM    likesd
            WHERE   type = 3
            GROUP   BY parent
        ) b ON a.country = b.country
SET     a.votes = b.totalVotes
WHERE   a.id = b.parent;

実際には次のようになります。

select id from likesd where type = 2
select sum(votes) as totalVotes where parent = id
update likesd set votes = totalVotes where id = parent and country = country

これをどのように行うことができるかについてのアイデア。2 つの選択で問題ありませんが、3 つ目の選択がスタックしています。

編集: タイプ=テーブルで2回繰り返す

4

3 に答える 3

1

このようにしてみてください...

  UPDATE  likesd  inner join 
(Select id, ifnull((Select Sum(Votes) from Likesd A where A.parent=B.Id),0) as suvotes from Likesd) B on B.id=likesd.Id
    Set likesd.Votes=B.suvotes
    where type=2
于 2013-05-20T04:46:18.263 に答える
1
UPDATE likesd a, (SELECT Parent, SUM(Votes) as TotalVotes
                  FROM likesd
                  GROUP BY Parent) b
SET a.Votes = b.TotalVotes
WHERE a.Type = 2
    AND a.id = b.parent

参考:FROM句で更新対象テーブルを指定できない

于 2013-05-20T05:16:21.913 に答える
0

同じテーブルから選択して更新する場合、from でターゲット テーブルを指定することはできません。これは手続きなしではできません。必要に応じて、これを行う 1 つの方法があります。

CREATE TABLE temp SELECT * FROM likesd;
UPDATE  likesd  B
SET B.votes=(SELECT SUM(votes) FROM temp A WHERE  A.parent=B.TYPE)
WHERE TYPE=2; 
DROP TABLE temp;

コード内ですべてのクエリを 1 つずつ実行します。

于 2013-05-20T04:55:42.513 に答える