私は mysql db のソート構文を使用していますが、列の完了によって行をソートしたいと考えています。例が問題を説明することを願っています:
id |t1 | t2 | t3 | t4
----------------------
1 | a | b | c | d
2 | | e | |
3 | f | g | |
4 | h | i | j |
これは私の行/列構造です。ご覧のとおり、一部のフィールドは空です。入力が次のようになるようにテーブルを並べ替えたい
id |t1 | t2 | t3 | t4
----------------------
1 | a | b | c | d
4 | h | i | j |
3 | f | g | |
2 | | e | |
入力された (空でない) フィールドの数でソートされています。これを行う最も簡単な方法は、次のようなクエリでソートすることです。
SELECT id, t1, t2, t3, t4 FROM table ORDER BY t1 DESC, t2 DESC, t3 DESC, t4 DESC
ほとんどの場合は問題なく動作しますが、テーブルが次のようになっているとどうなるかを見てください。
id |t1 | t2 | t3 | t4
----------------------
1 | | b | c | d
2 | | z | |
並べ替え後:
id |t1 | t2 | t3 | t4
----------------------
2 | | z | |
1 | | b | c | d
なんで?並べ替え順序が降順で、t1 列が空 (無視される) で、次の列が t2 であるためです。また、残りの列を無視して降順でソートされます (列が空の場合)。
ここで同様の問題が解決されていることがわかりました(推測-まだチェックされていません)が、解決策は厄介に見えます。空でない列の数でテーブルを並べ替える他のアイデアはありますか?