【MySQL ビンゴ回答には300ポイント】


環境-----
 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文での方法をご教授ください。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2006/05/29 17:52:12
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:asakura-t No.1

回答回数151ベストアンサー獲得回数2

ポイント300pt
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...

id:keijiro

まさにビンゴです!

私の希望の結果が間違っていたことも分かりました m(_ _)m

テーブル構造の変更は可能ですが、良いアイディアが浮かんでいません。

ちょっと考えてみます。

ありがとうございます。

2006/05/29 17:24:37

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません