2

私はいつもこれについて疑問に思っていましたが、現在、クライアントはそれが実現可能かどうか疑問に思っています:

次のように分類されたスポーツのリストがあります。

  • 男子アイスホッケー
  • 男子テニス
  • 女子アイスホッケー
  • 女子テニス

...等

そして、彼らはそれを次のように並べ替えたいと思っています:

  • 男子アイスホッケー
  • 女子アイスホッケー
  • 男子テニス
  • 女子テニス

...等

クエリを変更するだけでこれが可能かどうか疑問に思っています。残念ながら、スポーツを性別非特定に設定して、性別を別のフィールドとして設定することはできません。データベースを大幅に編集できません。この問題に取り組む最善の方法は「最も一般的な単語」クエリであると考えましたが、これがどのように行われるかわかりません。

皆さんが提供できる助けを前もって感謝します!

更新: クライアントは最終的にリクエストを破棄しましたが、受け入れられた回答としてアプローチした可能性が最も高いでしょう。まだ完全に満足のいく方法ではありませんが、MySQL で利用できるより「エレガントな」ソリューションがあるかどうかはわかりません。

4

2 に答える 2

3

「最も一般的な単語」は、各行の一般的な単語を次の行と比較しますか? 異なる行を互いに比較するためのクエリを取得するのは難しいため、SQL ではかなり難しいでしょう。

規範的な CASE ステートメントで注文することもできますが、きれいではありません。

...
CASE スポーツ名順
    WHEN 'Boys Ice Hockey' THEN 1
    WHEN 'ガールズアイスホッケー' THEN 2
    WHEN '少年テニス' THEN 3
    WHEN「女子テニス」 THEN 4
    -- など
エンドケース
于 2009-05-08T14:06:50.307 に答える
2

次のようなことができますか

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

すべてのスポーツがBoys/Girlsで始まる場合、mysqlで?

または、スペースが区切り文字として使用されている場合は、以下のほうがよい場合があります。

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

以前にこれを試したことがなく、テストするためのmysqlインスタンスがないため、完全にテストされていません

于 2009-05-08T14:12:20.947 に答える