ソフトウェア開発者の日常

こだわりなく書きたいことを書いていきます。

同じデータを用いているのに表示順序が違う

システムの動作を確認していると、入力内容の確認画面だけ表示順序がおかしく、入力内容の変更画面、CSV出力は予定通りの順番に出力されるという現象に気がつきました。
具体的には、入力内容の確認画面では、

No.2 Bさん
No.3 Cさん
No.4 Dさん
No.1 Aさん

という順番で表示されますが、入力内容の変更画面では、

No.1 Aさん
No.2 Bさん
No.3 Cさん
No.4 Dさん

という順番で表示され、CSV出力も

No.1,No.2,No.3,No.4
Aさん, Bさん,Cさん,Dさん

という順番で出力されています。

理由は?
unsplash-logoDewang Gupta

添字を指定しているかしていないかで、正しい順序になるかならないか違う

入力内容の確認画面のソースコードを見ると、データベースから取得した値を配列に入れ、配列を順番に表示しています。
番号と名前を取得して、番号を配列の添字として利用しています。

データベースから値を取得するときの条件を確認すると、ソート条件に使える番号をORDER BY句に指定していませんでした。
ORDER BY句にソート条件として使える値を番号を指定したら、入力内容の確認画面でも、入力内容の変更画面、CSV出力と同じ順番になりました。

よくよくソースコードを見ると、入力内容の確認画面では、foreach文で配列に入っている値を最初から取り出して表示しています。
入力内容の変更画面、CSV出力でも同じ配列を利用していますが、最大5人まで登録される可能性があるので、for文で配列の添字として1~5を指定しています。

この違いがあったので、入力内容の確認画面では正しくない順番で表示されたのが、入力内容の変更画面、CSV出力は正しい順番となっていました。


最初からORDER BY句にソート条件として番号を指定しておけば発生しない現象でした。