2009-05-08 12 views
2

分野で最も一般的な言葉でMySQLのクエリーを発注し、現在クライアントがfeasableだかどうかを疑問に思っている:は、私はいつもこのことについて不思議に思っていました

私は、スポーツのリストを持っている、などのように分解:

  • 少年アイスホッケー
  • ボーイズテニス
  • 女の子アイスホッケー
  • 女の子テニス

...など

そして、彼らはそれをソートするように:

  • 少年アイスホッケー
  • 女の子アイスホッケー
  • ボーイズテニス
  • 女の子テニス

...など

これは単純にクエリを変更することで可能かどうか疑問に思っています。残念なことに、私はスポーツを性別が不特定であるように設定することはできず、性別を別の分野として設定することはできません。私は重要な方法でデータベースを編集することはできません。私はこの問題に近づく最善の方法は「よくある言葉」だと思っていましたが、どうやってこれが行われるのか分かりません。

お手数ですがお手数ですがお早めに!

更新:クライアントは要求を破棄してしまいましたが、私はそれを最も受け入れられる回答に近づけるでしょう。まだ完全に満足できる方法ではありませんが、MySQLで利用できるより洗練されたソリューションがあるかどうかはわかりません。

答えて

2

はmysqlで

ORDER BY SUBSTRING(sport_name, 6), SUBSTRING(sport_name, 1, 5) 

ような何かを行うことができますか?

スペースを区切り文字として使用されている場合は別の方法として、以下の方が良いかもしれません:私は前にこれを試してみましたため

+0

SUBSTRINGの長さと開始位置のパラメータを混ぜ合わせて、位置が1から始まると私は信じています – Trotts

+0

これは問題を一般的には解決しません*、そうでしょうか?:) – Tomalak

+0

うん、私はそれをテストし、atmすることができないと言ったように、私はそれが動作すると仮定して少し強固かもしれない2番目のオプションを入れた:) – Trotts

3

「ほとんどの言葉は共通」のように、各行の共通語句を次の行と比較しますか?それは、異なる行をお互いに比較するクエリを取得するのが難しいため、SQLではかなり難しいでしょう。

あなたは規範CASE文で注文することができ、それはかなり可能文句を言わない:すべてのスポーツはボーイズ/ガールズで始まる場合

 
... 
order by CASE sport_name 
    WHEN 'Boys Ice Hockey' THEN 1 
    WHEN 'Girls Ice Hockey' THEN 2 
    WHEN 'Boys Tennis' THEN 3 
    WHEN 'Girls Tennis' THEN 4 
    -- etc 
END CASE 
+0

1に対してそれをテストするためのMySQLインスタンスを持っていけないhaventはよう

ORDER BY SUBSTRING(sport_name, LOCATE(sport_name, ' ')), SUBSTRING_INDEX(sport_name, ' ', 1) 

完全にテストされていません実用的なアプローチ。これは、予測可能な結果と限られた時間で、それを行う唯一の方法かもしれません。 – Tomalak

関連する問題