重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

MySQL4.0で、2つのカラムを比較してソートをしたいと考えています。

cat dog
==================
3   12 ------------> 3
5 2 ------------> 2
7 15 ------------> 7
16 9 ------------> 9

というテーブルがあり、cat列もしくはdog列を比較してどちらか小さい値をキーにしてソートさせたいのです。

上の例だとこんな感じに結果を得たいのですが。。。。
cat dog
==================
5 2 ------------> 2
3 12 ------------> 3
7 15 ------------> 7
16 9 ------------> 9

一度結果セットを配列にいれて、プログラム側で再度ソートをかけようかなと思っていたのですが、できればSQLの側でできないものかと考えています。4.1以降であれば、サブクエリを使ってなんとかできそうなのですが、4.0なので方法がぜんぜん思い浮かびません。どのようにSQLを書けばいいのでしょうか??

A 回答 (4件)

LEAST(cat,dog) という関数を使用すれば、小さい方の値が出ます。


この関数が使えれば良いのですが..

ORDER BY LEAST(cat,dog)
なんて、できませんかね~??

この回答への補足

ありがとうございます!これでいけましたっ!
この関数、初めて知りました。もっともっと勉強しないといけませんね。ありがとうございました。

補足日時:2007/08/16 08:57
    • good
    • 0

「動けばいい」なら、#2さんや#3さんの回答でいいと思います。



しかし、「order by」で列名でなく、式を書いた場合、仮にインデクスが定義されていても、MySQLは「ソート抑止」してくれません。

データ件数がどのくらいあるのか不明ですが、こういった操作をSQLでやろうとするなら、RDBMS側での性能向上は図れないことを承知しておいてください。

この回答への補足

回答ありがとうございます。データ件数は最大でも100件程度の小さなデータです。where句でさらに絞り込んでいるので、実際に取り出されるのは30件あるかないか、くらいです。
社内にあるサーバーであればRDBMS側の性能向上も視野にいれたいところなのですが、専用サーバーをレンタルしている状況で、しかもそれほどスキルがないので、SQL側でぜんぶまかないたい、というのがホンネです。また、データもそれほど厳密さを要求されるものではないので、なので「とりあえずそれに近いデータがでてくればまぁいいや」といったところでしょうか。RDBMS側にも詳しくなりたいと思ってます。

補足日時:2007/08/16 08:52
    • good
    • 0

#2さんの方法でいけそうですね。


もうすこし突っ込んでいけば、ORDER BYは結構なんとでもなるものなので

SELECT *
FROM テーブル
ORDER BY IF(cat<dog,cat,dog)

なんてのでも動きます
    • good
    • 0
この回答へのお礼

ありがとうございます。これでもいけましたっ!order by 句ってけっこう万能ですね。order by で IFを使う方法、実ははじめて知りました。いろいろ他にも応用できそうなので、ちょっと勉強してみようと思います。

お礼日時:2007/08/16 09:00

catとdogのうち小さい方を入れる列を作って、その列でソートしたらいいです。

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す