dポイントプレゼントキャンペーン実施中!

mysqlで
駅1から徒歩何分、駅2から徒歩何分
というカラムがあり、
駅から近い順に並び替えるというものを作っているのですが
駅から何分を入力するところが駅1と駅2と2つカラムがあるため
それらを合わせて、ソートしたいと考えています。

理想のレコードとして 

駅1 徒歩2分
駅2 徒歩2分
駅2 徒歩3分
駅1 徒歩5分
駅2 徒歩6分

こんな感じにしたいのですが、
これを実現するにはどのようなソートを組めばよいのでしょうか?

A 回答 (2件)

テーブルの1つのレコードに対して、小さい方だけを出力するのか、両方とも出力するのかによって変わってくるかと。


(テーブルの1レコードに付き、結果が1つになるのか2つになるのか)

例えば、下記の様なテーブルの場合、(1)と(2)の様な結果が考えられます。

テーブル -------------------------------
データA  駅1から2分  駅2から5分
データB  駅1から4分  駅2から3分
----------------------------------------

(1) 1レコード中の小さい方だけを出力する場合

検索結果 -------------------------------
駅1  2分
駅2  3分
----------------------------------------

(2) 1レコード中の駅1・駅2の両方とも出力する場合

検索結果 -------------------------------
駅1  2分
駅2  3分
駅1  4分
駅2  5分
----------------------------------------


(1)の場合

SELECT 内でCASE式等によって小さいほうのカラムの値を出力し、それをソートのキーにすれば出来ます。

例 -------------------------------------
SELECT
CASE WHEN 駅1からの距離 <= 駅2からの距離 THEN '駅1' ELSE '駅2' END,
CASE WHEN 駅1からの距離 <= 駅2からの距離 THEN 駅1からの距離 ELSE 駅2からの距離 END
FROM テーブル名
ORDER BY 2;
----------------------------------------

(2)の場合

駅1からの距離と駅2からの距離をそれぞれ取出し、UNION ALL で繋げて、距離のカラムをソートのキーにすれば出来ます。

例 -------------------------------------
SELECT '駅1', 駅1からの距離 FROM テーブル名
UNION ALL
SELECT '駅2', 駅2からの距離 FROM テーブル名
ORDER BY 2;
----------------------------------------
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
大変分かりやすく参考になりました。

お礼日時:2011/07/03 10:26

ホントのところ、この手の処理は物件に対して最寄駅が不定なため


別テーブルにするのが正しいです。
構造が変えられないわけではないなら、検討ください
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

お礼日時:2011/07/03 10:26

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

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