人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

●質問者: PEPOTA
●カテゴリ:インターネット ウェブ制作
✍キーワード:24 28 CentOS MySQL PHP
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● 浅倉卓司
●300ポイント ベストアンサー
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

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

ちょっと考えてみます。

ありがとうございます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ