0

私のブログ サイトの投稿にはさまざまなカテゴリがあります。投稿の総数もあるのですが、投稿の総数 = 異なるカテゴリの合計数のエントリを更新する SQL ステートメントを作成するにはどうすればよいですか?

ここに私が持っているものがあります

$blog_number_update = "UPDATE `blog_categories` SET `posts_counter` = '(total of all other rows with an number greater then 0 in the posts_counter column)' WHERE `name` = 'Number'"

これはどうやって書くの?

(posts_counter 列で 0 より大きい数値を持つ他のすべての行の合計)

4

3 に答える 3

0

カウンターとその合計の両方を同じテーブルに格納するのは良い考えではないと思います。この種の統計用に別のテーブルを用意することをお勧めします(その場で統計を計算するのが遅すぎる場合のみ)。

WHERE句のサブクエリで同じテーブルを使用しないというMySQLの制限を回避する方法は次のとおりですUPDATE

UPDATE
        ( SELECT SUM(posts_counter) AS counter_sum
          FROM blog_categories 
          WHERE posts_counter > 0 
            AND ( name <> 'Number' OR name IS NULL ) 
        ) AS s 
    CROSS JOIN 
        blog_categories AS b
SET
    b.posts_counter = s.counter_sum
WHERE 
    b.name = 'Number' ;
于 2012-12-13T08:09:42.773 に答える
0

サブクエリを使用して、これらのクエリを組み合わせることができます。

何かのようなもの

 UPDATE `blog_categories` SET `posts_counter` =(SELECT SUM(posts_counter) FROM blog_categories WHERE posts_counter>0) WHERE `name` = `value`

正常に動作するはずです。ただし、大規模なデータ セットでは、パフォーマンスに深刻な影響を与える可能性があります。

于 2012-09-30T22:30:35.127 に答える
-1

MySQL では、選択したテーブルを更新することはできません。したがって、これは 1 つのクエリでは不可能です。

2つの部分でそれを行うには、次のことができます

SELECT SUM(posts_counter) FROM blog_categories WHERE posts_counter>0

WHERE負の値がない場合、句は冗長です)、結果をPHP変数に取得して$posts_counterから実行します

UPDATE `blog_categories` SET `posts_counter` = $posts_counter WHERE `name` = 'Number'
于 2012-09-30T22:20:29.017 に答える