2017-05-08 3 views
1

私は特定の方法でフィールドをインクリメントするために適切なSQLスクリプトを実行するのに苦労しています。mysqlで独自のインクリメント値を行うにはどうすればいいですか

これら2つのスクリプトは例外ではありませんが、結果には何も起こりません。

スクリプト1:

UPDATE 
    myTable T1, 
    (
     SELECT id, 
       (@s:[email protected]+1) AS seq 
     FROM myTable, (SELECT (@s:=0) AS s) s 
     WHERE infotext IS NULL ORDER BY grouptext 
    ) T2 

SET sequence = seq 

WHERE T1.id = T2.id 

スクリプト2:

UPDATE myTable AS target 

INNER JOIN (
    SELECT supfault_id, 
      (@s:[email protected]+1) AS seq 
    FROM myTable, (SELECT (@s:=0) AS s) s 
    WHERE infotext IS NULL ORDER BY grouptext 
) AS ordered ON ordered.id = target.id 

SET sequence = seq 
+0

何をしますか?新しいレコードを挿入した後にレコードを更新しますか?または最後の値を取得して1ずつ増やしますか? –

+0

新しい列が追加されたレコードのあるテーブルがあります。 すべての値は0に設定されています。 そして、これらの値を特定の方法で増やす必要があります。 レコードには、独自のシーケンス値があります。 – domino

+0

現在、私はアルファベット順のソートを行い、ソートされたデータをビューで使用する必要があります。 しかし、私はフロントエンドでアルファベット順を行うことはできません。なぜなら、将来、ユーザーはそれを再配列するオプションを持つからです。 – domino

答えて

0

サブクエリを別々にうまく働いていたので、私はなぜサブクエリからシーケンス値をseqで更新できないのか疑問に思った。

私は専門家ではありませんが、サブクエリのために仮想テーブルを使用する必要があると感じました。ここで

内側のためのソリューションである場合に参加:

CREATE TEMPORARY TABLE supportGroupSeqcalculation AS 
    SELECT supfault_id, 
      (@s:[email protected]+1) AS seq 
    FROM myTable, (SELECT (@s:=0) AS s) s 
    WHERE infotext IS NULL 
    ORDER BY grouptext; 

UPDATE myTable AS target 
INNER JOIN supportGroupSeqcalculation AS ordered ON ordered.supfault_id = target.supfault_id 
SET sequence = seq; 

DROP TEMPORARY TABLE supportGroupSeqcalculation; 

我々は、一時テーブルに特定の順序を取得し、シーケンス値として記録することができます。

一時テーブルを削除する必要はありませんが、現在のセッションにのみ存在します。

0

この一つ一つTABLE1と増分から最後DESC値を取得し、その後table2の更新:

set @inc = 0; 
select cast(valToIncrement as signed) into @inc from 
(select REPLACE(fkid,' ','') as valToIncrement from tbl_1 ORDER BY fkid)as a ORDER BY valToIncrement desc limit 1; 

update tbl_2 set fkid = @inc + 1 where fkid = 122; 
+0

テーブルの実名とそのカラム名を置き換えてください。 –

+0

読みにくいですが、私はあなたのアイデアを得ました。私はインクリメントを行う方法がより明確に存在すると思います。 本当に私は特定の方法で並べ替えを行う必要があるので、私はスクリプト内で更新を行うためにsubselectを使用しています。副選択では、私が必要とする順序で必要なものを得ることができ、副選択からseqによってシーケンス値を更新するだけです。 – domino

関連する問題