環境-----
CentOs 4.2
MySQL 4.1.12
PHP 4.3.9
質問-----
以下のようなデータがあるとします。
全てint型です。
id1 | id2 | id3
28 27 22
29 18 24
16 16 18
14 25 27
02 15 03
01 29 02
01 02 28
これを
id1>id2>id3の優先順位で並び替えたいと思っています。
分かりにくいかもしれませんが、
まず、1つ目の条件は、id1です。
一番目のid1の値と次のid1との値の間にある値がid2にあれば、
それを優先して持ってきます。
同じような条件でid3という感じです。
これらが無ければ、次のid1に続きます。
う~ん(*_*)説明がへたくそでごめんなさい。
希望の結果は以下の通りです。
id1 | id2 | id3
29 18 24 (id1が29)
01 29 02 (id2が29)
28 27 22 (id1が28)
02 26 03 (id2が26)
14 25 27 (id2が25)
01 02 28 (id3が28)
16 16 18 (id1が16)
SQLで無理なら、PHPでも可ですが、複雑で書ききれないですよね…
できれば、SQL文での方法をご教授ください。
SELECT *, CASE WHEN id1>=id2 THEN id1 WHEN id2>=id3 THEN id2 ELSE id3 END AS idx FROM a ORDER BY idx DESC;
上記のSQLで取得可能だと思います。
このデータ構造ではどうやってもパフォーマンスが悪くなりますので、可能ならばテーブル構造を変更したほうが良いでしょう。
参考:
http://dev.mysql.com/doc/refman/4.1/en/control-flow-functions.ht...
まさにビンゴです!
私の希望の結果が間違っていたことも分かりました m(_ _)m
テーブル構造の変更は可能ですが、良いアイディアが浮かんでいません。
ちょっと考えてみます。
ありがとうございます。