MySQLデータベースのソート方法

このQ&Aのポイント
  • 株式会社や有限会社などの記号を省いた状態で、MySQLのデータベースをソートする方法を教えてください。
  • MySQLのデータベースでテーブルのフィールドをソートする際、株式会社や有限会社などの記号を省いた状態でソートすることは可能でしょうか?
  • MySQLデータベースのテーブルをソートする際、フィールドの内容から株式会社や有限会社などの記号を除外する方法を教えてください。
回答を見る
  • ベストアンサー

ソート。内容の一部を置換して出来るか

お世話になります。 winXP,MySQL5.0で開発を行っています。 テーブル名 usr_tbl フィールド名 company とした場合、companyの内容として、 「株式会社サンプル商事」 「(株)さんぷる」 など、株式会社、有限会社等がマチマチの方法で入力されています。 今回、companyでソートをかけて抽出したいのですが、 このとき、株式会社などの記号を省いた状態でソートしたいのです。 上の例だと 「サンプル商事」 「さんぷる」 としてソートしたいです。 このようなことが出来るのでしょうか? 全件抽出後に、独自でソートしたほうが速いのでしょうか? よろしくお願いいたします。

  • mm666
  • お礼率92% (58/63)
  • MySQL
  • 回答数3
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • Siegrune
  • ベストアンサー率35% (316/895)
回答No.3

select * from usr_tbl ・・・ order by replace(・・replace(company,'株式会社',''),'(株)','')・・・・ ・・はreplace( ・・・・は,'有限会社など対象外にしたい文字列','') 有限会社株式会社 なんていう会社名があるとうまくうごきませんが、 まずないでしょう。 >全件抽出後に、独自でソートしたほうが速いのでしょうか? 全件抽出後に、独自でソートしたほうが早いかもしれません。 こちらは私はよくわかりません。 試してみてもらわないと。 replace関数の説明 http://oss.timedia.co.jp/show/MySQL%E6%97%A5%E6%9C%AC%E8%AA%9E%E3%81%AE%E6%97%85/REPLACE()%E3%81%A7%E6%96%87%E5%AD%97%E5%88%97%E3%81%AE%E4%B8%80%E9%83%A8%E3%82%92%E7%BD%AE%E6%8F%9B%E3%81%99%E3%82%8B ## MYSQL使う環境がないので、 ## 確認はしていません。 ## また、MYSQLの方言は分かっていないので ## Order by でかけるのは、select句の中の項目だけとかなら、 ## select句中に書いてas XXで名前をつけてそれでorder byしてください。

mm666
質問者

お礼

ありがとうございました。 replaceで対応することができました。 複数置換したい場合のreplaceの書き方が分からなかったので、 非常に助かりました。

その他の回答 (2)

  • chie65535
  • ベストアンサー率43% (8523/19372)
回答No.2

正しくソートするには、別途「読みフィールド」が必要ですね。 「清和コーポレート」を「セイワコーポレート」と読むか「シンワコーポレート」と読むか、漢字のみでは判らないので「セ」か「シ」のどちらで読むかの判断材料である「読みフィールド」が必要です。 この辺りをきちんとしないと、顧客から「清和コーポレートが『シ』の所に出てこないバグがあるので直して欲しい」と言われ、困った事になります。

mm666
質問者

お礼

ありがとうございます。 確かに読み用のフィールドがないと正しくソートは出来ないと気づきました。 今回は社内だけで使っているものなので、そのあたりはどうにかなりそうですが、 次回からは社名や氏名でソートをする可能性があるときは 設計時に盛り込むように注意したいと思います。 助かりました、ありがとうございました。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

ソート用のフィールドをつくっておいて、 INSERT するときに不要な文字列を削除して登録しておくのがベター。 order by 句でreplace()関数を使うこともできますが インデックスも効かないし効率はわるいとおもいます

mm666
質問者

お礼

ありがとうございます。 replaceだとインデックスも効果なくなるのですね。 今回は社内の小さなシステムであるということもあり、 インデックスは設定されていませんでしたが、次回以降注意して行きます。 助かりました、ありがとうございます。

関連するQ&A

  • カラムのデータの一部を置換するには?

    下記のようなテーブルのデータの「company」カラムの データのうち「株式会社」を「(株)」に置換するには どのようにすればよろしいでしょうか? id    name    company ------------------------------ 001   三谷花子  株式会社AAA商事 002   鈴木研司  有限会社PHP ・・・    ・・・    ・・・ ------------------------------

    • ベストアンサー
    • MySQL
  • エクセルのオートフィルタで抽出できない!?

    1~19000ぐらいある会社名のリストで、○×商事 株式会社(商事と株式会社の間にスペース有り)を 抽出したい場合、オプションで『○×を含む』にした場合はちゃんと抽出されるのですが、 『○×商事 株式会社と等しい』とリストと一字一句間違わずに入力した場合は抽出されません。 何故でしょうか? 『○○を含む』でちゃんと抽出されるので別に困らないのですが、どうしてこういったことになるのか知りたいのです。

  • GROUP BYで集約されるときのソートを変えたい

    GROUP BYで集約されるときのソートを変えたい MySQLの5.1を使用しています。 テーブル"tbl"には、"no","id","score"の3つのフィールドがあり、 "no"は主キーです。 +---+----+-------+ | no | id | score | +---+----+-------+ | 1 | 10 | 10002 | | 2 | 10 | 10000 | | 3 | 10 | 10008 | | 4 | 11 | 10004 | | 5 | 12 | 10006 | +---+----+-------+ 上記の表から、 scoreの値が高い順にグループ化してソートしたいのですが、 以下のSQL文ではscoreが最初に登録されたものに集約されてからグループ化されてソートしてしまうため、 思い通りの結果が得られずに困っています。 ↓具体例 SELECT no, id, score FROM tbl ORDER BY score DESC GROUP BY id; +---+----+-------+ | no | id | score | +---+----+-------+ | 5 | 12 | 10006 | | 4 | 11 | 10004 | | 1 | 10 | 10002 | +---+----+-------+ ↓欲しいソート順 +---+----+-------+ | no | id | score | +---+----+-------+ | 3 | 10 | 10008 | | 5 | 12 | 10006 | | 4 | 11 | 10004 | +---+----+-------+ テンポラリテーブルはなるべく使用せずソートしたいのですが、 このような事は可能なのでしょうか? ご存知の方がいらっしゃいましたら教えていただけると助かります。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • Excelのオートフィルタでソートする際に「株式会社(有限会社)」を無視したい。

    Excelで、取引先の会社をリスト化しているのですが、 昇順で並べ替えした際に、あいうえお順でソートされますが、 例えば、以下のデータを昇順でソートすると、 このような順になります。 ------------------------------- アルテイシア株式会社 イスカンダル株式会社 株式会社アカイスイセイ 有限会社宇宙ステーション ------------------------------- これを、「株式会社(有限会社)」を無視して、 それ以外の部分の社名(アルテイシアやアカサタナ)だけで ソートしたいのです。 もし、出来たとしたら、このようになります。 ------------------------------- 株式会社アカイスイセイ アルテイシア株式会社 イスカンダル株式会社 有限会社宇宙ステーション ------------------------------- 出来ればデータをいじること無く、このように出来る機能や ワザがあれば、どなたか教えて下さい。 宜しくお願い致します。

  • 【初歩的質問】長い文字列を短く置換して表示させるのに効率的な方法

    MySQLに (1) あああ株式会社東京出張所 (2) いいい株式会社大阪支店 (3) ううう株式会社名古屋事業所 と登録されているデータがあります。全部で30種類(30支店/出張所)あります。 これらは長いので、PHPで取り出してHTMLに表示させる際、個別に (1) あああ・東京 (2) いいい・大阪 (3) ううう・名古屋 のような省略形に加工したいのですが、 PHPで加工するのに最も効率的(処理が早い)のはどんな方法ですか? なお、何文字目は必ず除去できるなどの法則性はないので、原名⇒加工名の 対応関係を作るしかないと思います。 素人考えで、次のように30回分岐させる方法を思いつきましたが、 とても効率的だと思えません。 if($company == "あああ株式会社東京出張所"){   $company = "あああ・東京"; }elseif($company == "いいい株式会社大阪支店"){   $company = "いいい・大阪"; }elseif($company == "ううう株式会社名古屋事業所"){   $company = "ううう・名古屋"; }else{   $company = "――社名不明――"; } また、いずれにしても↑はエラーで動かなかったので(^^;?ナゼ...)、 ($company == "あああ株式会社東京出張所") を ($company === "あああ株式会社東京出張所") と ==を===にしたり、 ($company == 'あああ株式会社東京出張所') と " を ' にしたり、 いろいろやってみましたが、ダメみたいです。 ■ 環境 PHP 4.3.11 MySQL 4.0.25 ■知識レベル: HTMLタグ打ち、初歩的なSQLを理解できる程度、PHP他プログラミング知識ほとんどなし

    • ベストアンサー
    • PHP
  • 検索のソートについて

    以前phpのカテゴリ内で以下のようなQ&Aをみつけましたが、まったく同じ状況で使用する言語がperlの場合どのようにすればいいのでしょうか?どなたか教えて下さい。 "PHP+MySQLを勉強中です。 例えば、商品テーブルに商品ID、商品名、価格、在庫数の4つのフィールドがあって、その表の各名称をクリックするとソート(例:オークションなどで現在価格をクリックするとソートなど[select * from 商品 order by 価格 asc])できるスクリプトをどのように作成すればよいか教えて下さい。" "shohin.phpで商品一覧を表示するとして、フィールド各名称のリンクを <a href="shohin.php?sort=1">商品ID</a><a href="shohin.php?sort=2">商品名</a>・・・ のようにします。" あとはswitch文を使ってget値(sort=の値)別にクエリーを変えるだけです。

    • ベストアンサー
    • Perl
  • PHP+MySQLでのソートについて

    PHP+MySQLを勉強中です。 例えば、商品テーブルに商品ID、商品名、価格、在庫数の4つのフィールドがあって、その表の各名称をクリックするとソート(例:オークションなどで現在価格をクリックするとソートなど[select * from 商品 order by 価格 asc])できるスクリプトをどのように作成すればよいか教えて下さい。

    • ベストアンサー
    • PHP
  • 正規表現で、ある文末に不一致の抽出方法

    先ほど私の質問の仕方が悪かったので、再質問いたします。 文頭が必ず「abc」で始まり、且つ、文末が「def」でないものに一致させる正規表現の記述方法を教えてください。 たとえば、次のような場合、「三菱」で始まり、且つ、文末が「株式会社」でないものは「三菱商事有限会社」となります。 三菱商事株式会社  三菱銀行株式会社  三菱商事有限会社 ←一致 三井商事株式会社  株式会社三菱商事 

  • Accessで、1つの項目に複数の置換えを1度でするには?

    Access2003で、1つの項目に複数の置換えを1で実行したいのですが、どうすればいいのでしょうか? 編集メニューの『置換』を使うのではなく、クエリやマクロで実行したいのです。 どんどん溜めているデータを定期的に決まった文字を1度に変換できるようにしたいのです。 例えば、[会社名]フィールドに入っている  「株式会社」 を 「(株)」 に、  「有限会社」 を 「(有)」 に、  「法人会社」 を 「(法)」 に、…続く…、などと置換えしたいのです。 更新クエリで、『Replace([会社名],"株式会社","(株)")』 と1つなら置換えできたのですが、複数置換えしたい場合は、同様のクエリをその数だけ作ってマクロで続けて実行させるという方法しかないのでしょうか? できればクエリを増やしたくないので、他にいい方法がありましたら、教えて下さい。

  • DB内にあるデーターのソート

    こんばんわ。 以下の件について、どなたがサンプルソースを交えてご教授下さい。 環境: windows Apache2 + PHP5 + MySQL データーベースにある、2つのフィールドを対象にして データーをソートして表示させたいのですが、なにかいい方法はありませんか。 例 対象データベース↓ id name point item 1 user1 340 item1 2 user2 540 item1 3 user3 210 item2 4 user4 319 item2 5 user5 233 item3 このデータベースを読み込み、以下の様にソートし表示したいのです。 ◇item1 user2:540 user1:340 ◇item2 user4:319 user3:210 ◇item3 user5:233 ※item欄にあるデーター毎に、pointの高い数値に並び替える。 以上、よろしくお願いします。

    • 締切済み
    • PHP