2012-05-11 19 views
1

ここに私のテーブル構造があります:
tableです。 id(自動インクリメント;主キー)
tableqty(可能な値:0から1000)データベース内の複数の行から数量を削除する

行:

 
+----+-----+ 
| id | qty | 
+----+-----+ 
| 1 | 0 | 
| 2 | 5 | 
| 3 | 5 | 
| 4 | 10 | 
+----+-----+ 

私は12の意味で使用可能量を減少したい、新しい結果は次のようになります。
編集:私はおそらく指定されている必要がありますこれらの数字はすべて任意です。彼らは何でもかまいません。各行

  • 使用から削除するにはどのような数量を把握するために、すべてのデータによる

    1. SELECT id, qty FROM table WHERE qty > 0 LIMIT 12

    2. フィルタ:

       
      +----+-----+ 
      | id | qty | 
      +----+-----+ 
      | 1 | 0 | 
      | 2 | 0 | 
      | 3 | 0 | 
      | 4 | 8 | 
      +----+-----+ 
      

      は今、私は、次の手順を実行します影響を受けた行を大量に更新するPDOの準備声明:

      UPDATE `table` SET qty = ? WHERE id = ?` 
      

    私の質問:MySQLでこれを行う方法はありますか?

  • +0

    idの4つの異なる値に渡って12の割り当てをどのように決定しますか?順序でそれらを取る?すべてを均等に引きますか?これまでに提供された2つの答えは、実際にはあなたが望む動作を得ることはありません。 –

    +0

    idの順番を下げてください。 – phpmeh

    答えて

    5
    SET @q = 12; 
    
    UPDATE `table` 
    SET qty = CONCAT(GREATEST(qty - @q, 0), LEFT(@q := @q - LEAST(qty, @q), 0)) 
    ORDER BY id; 
    

    sqlfiddleを参照してください。

    +0

    これについて今読んで、私の理解は、これは各行を通過することです、各行の真の偽のステートメントを行う:qty - 12が0より大きい場合は、その違いが何であれ返す。それ以外の場合は0が返されます。 私はそれをさらに1歩進めて、12を減分する数値にする必要があります。私はあなたが使用すると思う:量しかし、私はそこから失われています。 – phpmeh

    +0

    こんにちは、私はこれを動作させることはできません。カンマがエラーを引き起こしています - #1064 - SQL構文にエラーがあります。あなたのMySQLサーバのバージョンに対応するマニュアルをチェックし、正しい構文が '@ q:= @ q - LEAST( 'inv_layer'.qty_avail'、@q)の近くで使用するようにしてください。 ORDER BY' inv_layer'.'id'' at 1行目 – phpmeh

    +0

    @phpmeh:ええと...ごめんなさい...すべての課題が列になるようにするためにUPDATEは期待していませんでした。上記の更新されたコードはテストされ、動作しています! – eggyal

    関連する問題