2016-08-09 13 views
1

私は(ややこしい)独学のPHP開発者です。 :)行のエントリを並べ替えようとしています

私は作成しようとしているツールを持っている行のエントリを収集し、NULL値が行の最後になるようにそれらを注文します。ですから、例えば、私は値の行を読むことができるようにしたいし、それが次の行に書き戻す必要があり、この

| LeaderID | Person1 | Person2 | Person3 | Person4 | Person5 | Person6 | 
|-----------|---------|---------|---------|---------|---------|---------| 
| 1  | NULL | 5  | 8 | NULL | 9 | 11 | 

のように見えるの行がある場合:うまくいけば

| LeaderID | Person1 | Person2 | Person3 | Person4 | Person5 | Person6 | 
|----------|---------|---------|---------|---------|---------|---------| 
| 1  | 5  | 8  | 9 | 11 | NULL | NULL | 

をこれは理にかなっていますが、そうでない場合は質問してください私は検索しましたが、この問題の解決策を見つけることができません。

ありがとうございます!

+0

これをどのように生成するかについてのコードを表示すると、お手伝いできます。 – aynber

+0

あなたは行について話していますが、列を表示していますが、ここで何をしたいのか分かりません。これはデータベースですか、キー/値の配列ですか? – NDM

+0

どうすれば 'person4'が' NULL'から '11'に変わるのですか? 'person4'は常に同じ値を持つべきではありませんか? – chris85

答えて

-1

小説の長さにはならないSELECTは考えられませんが、この一連のUPDATEを使用して(永久に)データを変更したり、データの一時コピーに使用してあなたが欲しいと思うもの。

UPDATE theTable SET Person1 = Person2, Person2 = NULL WHERE Person1 IS NULL; 
UPDATE theTable SET Person2 = Person3, Person3 = NULL WHERE Person2 IS NULL; 
UPDATE theTable SET Person3 = Person4, Person4 = NULL WHERE Person3 IS NULL; 
UPDATE theTable SET Person4 = Person5, Person5 = NULL WHERE Person4 IS NULL; 
UPDATE theTable SET Person5 = Person6, Person6 = NULL WHERE Person5 IS NULL; 

これは、最初のパスで何をしたいかを保証するものではありません。この一連の更新を5〜6回繰り返す必要があるかもしれません。すべての値を "トリクル"するには(隣接するヌルの数によって異なります)。

実際には単一のクエリで実行できますが、これよりずっと複雑です。

+0

ありがとうございました!アップデートの実行をいつ停止するかはどのように分かりますか?これは手動で行う必要はありませんか? – NorthernWolf

+0

@NorthernWolfバッチ全体に「影響を受ける行」がない場合は、完了です。それを追跡したくない場合... Person1-5が最初にnullだった場合、Person6の値は "バッチ"ごとに1つ上に移動します。したがって、Person6が最後のスポットであると仮定すると、5バッチで完了することが保証されます。 _私の直感は、行の集合に必要な正確な数が、その集合の行の中の一番高い値のヌル値と等しいことを伝える。 – Uueerdo

関連する問題