• 締切済み

検索結果の重み付け

以下のようなテーブルがあったとして、 カラムA  名前 | カラムB  住所 横谷      | 横浜市 横山      | 谷町 横井      | 宇都宮市 WEBの検索のように複数の単語にて検索をかけるとき、 例えば「横」 「谷」 のワードで検索された時に 該当するものが多い順に 1,横谷 2,横山 3、横井 の順で sqlにてorder by するにはどのような方法がありますか?

みんなの回答

noname#212058
noname#212058
回答No.1

例えば、以下のような式でフィールドに含まれる「文字」の数を数えることができます。 (CHAR_LENGTH([列名]) - CHAR_LENGTH(REPLACE([列名], '文字', ''))) / CHAR_LENGTH('文字') これを応用すれば、「横」「谷」の数を数えて、その内容で ORDER BY することができるでしょう。 ORDER BY  (CHAR_LENGTH([列名]) - CHAR_LENGTH(REPLACE([列名], '横', '')) + (CHAR_LENGTH([列名]) - CHAR_LENGTH(REPLACE([列名], '谷', '')) ただ、この方法は計算量が多くなるので、検索対象のデータ量が多いと実用的なパフォーマンスが出ない可能性があります。あしからず。

muuming2001
質問者

お礼

なるほどー アイディアありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • SQLで検索結果の出力件数指定?

    SQLで検索結果の出力件数指定はできるのでしょうか? 例)SELECT * FROM SHOHIN ORDER BY SHOHINCD この様なSQLを発行した場合に検索結果を5件だけ出力する事は可能でしょうか? ・可能な場合具体的な指定方法を教えてください。 ・出力件数が可能の場合で、ソート順や検索条件(SHOHINCD>1000等)がない場合は順不同な結果が返ると思えばいいでしょうか? よろしくお願いいたします。

  • 検索結果の並び替え

    SQL,ASPでショッピングサイトの様な物を作っています。 アイテムテーブルには、”Title"と”Price" があります。 商品をキーワードで検索した結果を、 strSQL="select * from item where Title like '%"&request.querystring("keyword")&"%'" として、結果を表示した所に、その結果を”値段”をクリックしただけで、安い順に並び替えたいのですが、 strSQL="select * from classifieds where Title like '%"&request.querystring("keyword")&"%' order by price" とすれば、値段順に表示されることはできるのですが、 ”値段”をクリックしたときだけ、安い順に表示する様にしようと思っています。 (説明がうまくできませんが、Yahooショッピングで検索すると、結果が表示されその右上に”ソート順: 商品順 | 安い順 | 高い順”となっていて、クリックするとソートされるようになっていますよね。それと同じようにしたいのです。) アドバイス、よろしくお願いします。

  • PHPでの検索について

    PHPでMySQLを使ってテーブルから検索しようとしています。 テーブルの構造は id zaiko zaikoid の3つのカラムで構成されています。 このテーブルから 1.zaikoidでソート 2.zaikoでソート 3.zaikoから検索 を一度に行いたいのですが、どのようなSQL文を実行すれば良いのでしょうか… order by と auther を使えばどうにかなりそうなのですが中々正しく実行できません。 ご教授の程宜しくお願い致します。

  • 検索するレコードの件数について

    こんにちわ。 ハントと申します。 SQLで検索するレコードの件数について アドバイスを頂きたいのでよろしくお願い致します。 (質問内容) 検索するレコードが100件あるとします。 この内、50件を検索したいのですが、 うまく抽出できるSQLが思い当たりません。 (ROWNUMを使えばよいと思いましたが、ROWNUMが振られるのは ORDER BY の前であるので、  ORDER BYをした後に順番を振りたいのです。) どのようにSQLを組んだら抽出できるのかアドバイスをよろしくお願い致します。

  • RANK関数で順位付けする方法

    お世話になります。Oracle初心者です。RANK関数による順位付けについて悩み、検索してもわからず困っております。 次のような表tbがあります。 数値,順 70 10 30 この「順」のカラムに順位を付けて 数値,順 70,3 10,1 30,2 としようとしています。SELECTなら SELECT 数値,rank() over (order by 数値 desc) from tb; が成功します。これでupdateする場合、 (rank() over (order by 数値 desc))をした値を update tb set 順= とすればよいと思うのですが、うまくいきません。 PL/SQLを使わず、SQLでRANK関数を使って順位付けするにはどのようにしたらよろしいでしょうか。 勉強不足だと思い、申し訳なく思います。何卒よろしくお願いいたします。

  • MySQLのレコードを検索、検索結果を保持したまま並び替えしたいのですが・・・

    PHP4 MySQL4 経験値1ヶ月くらいのビギナーです。 PHP+MySQLで会員DBを構築し、やっと検索をかけて思惑の通り一覧が表示されるようになり感激していたのもつかの間・・・ この1週間『並び替え』という新たな壁にぶつかり身もだえしております。 ベテランの皆さま!どうか!どうか、お知恵を!救いの手をお貸しくださいませ!! 【 現状です 】 ■会員テーブル:member ■id:int ■name:vachar ■age:int ■addr:varchar レコード数200くらい 【 したいこと 】 例えば年齢を20~30で検索します。 50くらいのレコードが絞られて表示されます。 このときはidの順番に一旦並んでいます。 それから年齢の若い順、高齢の順に並び替えたいのですが・・・どうしたいいでしょうか? 【 やってみたこと 】 プルダウンを設置して、javascriptで選択した時点でURLを移動させて(違うファイルではなくそのファイルに)その際、GETで数値を持っていってもらって おんなじファイル(一覧表示のPHPファイル)にリンクさせて、そのGET値を受け取って、反映して・・・と文章にすると良くわからんことを思いついてして 見ました。 全てのレコードが表示されているときはうまく行きました・・・が、検索した結果の状態で並び替えると、検索した結果の50件の中での並び替えが できず、並び替えを実行すると全てのレコードが表示されてしまいます。 検索して、「絞り込まれた状態(ここでは50件のこと)」でそのレコードたちだけを並び替えさせたいのです。 【 こんなコードなんです 】 一覧表示のPHPファイル:ichiran.php <? $db = mysql_connect("localhost","××××","××××"); mysql_select_db("member"); $query = "SET NAMES utf8"; // 検索ページから年齢の下限を取得 $low_age= $_POST["low_age"]; // 検索ページから年齢の上限を取得 $high_age= $_POST["high_age"]; // 並び替えの時、 $order_age= $_GET["order_age"]; // 取得した検索結果からSQL文に変換(下限) if($low_age != ""){ $where_low_age = "age >= '$low_age'"; } else { $where_low_age = ""; } // 取得した検索結果からSQL文に変換(上限) if($high_age != ""){ $where_high_age = "age <= '$high_age'"; } else { $where_high_age = ""; // 取得した並び替えGETをSQL文に変換 switch ($order_age){ case 1: $sql_order = " order by age "; break; case 2: $sql_order = " order by age desc ; break; default: $sql_order = " order by id "; } // SQL文に変換 $query = "select * from member where ".$where_low_age." and ".$where_high_age.$sql_order; $result = mysql_query($query); </html> <body> <head> <!-- 並び替え --> <script type="text/javascript"> function change(myURI){ if(myURI !="default"){ window.document.location.href=myURI; } } </script> <!-- 並び替え --> </head> <!-- 一覧表示 --> while( $row = mysql_fetch_array($result) ) { echo $row["age"]."<br>"; } <!-- 並び替え実行部分 --> <form name="sampleForm1" id="sampleForm1"> <select name="selectMenu1" id="selectMenu1" onchange="change(this.form.selectMenu1.value);"> <option value="default" selected="selected">年齢並び替え</option> <option value="ichiran.php?order_age=1">若い順</option> <option value="ichiran.php?order_age=2">高齢の順</option> </select> </form> </body> </html> <? mysql_close($db); ?> 分かりにくい説明ですが、どうぞどうぞ皆さまよろしくお願い致します!!

    • ベストアンサー
    • PHP
  • 検索が速くなるSQL文を教えてください

    データベースに、例えば辞書に載っている単語が1000万件分入っているデータベースがあるとします。 このデータをあいうえお順に昇順にソートした上で、500万番目から30個のデータ(つまり、5,000,000番目~5,000,029番目)までのデータを取り出したいです。 このようなケースで検索がもっとも高速になるSQL文の書き方はどのような描き方になるのでしょうか? SELECT keyword FROM table ORDER BY keyword OFFSET 5000000 LIMIT 30 と書いたのですが、すごく遅いです。OFFSETが0であればとても速いです。

  • 五十音順

    テーブルのフィールドに、読み仮名が入っています。 あ行、か行など、五十音順に抽出する場合のSQL文ですが、 $sql = 'select * from テーブル名 where kana between "あ" and "お" order by kana'; 上記の文を $sql = 'select * from テーブル名 where kana between "$key[$i]" order by kana'; という具合に配列などに入れたいと考えておりますが。 そのようなことは可能なのでしょうか? それとも、もっと効率よく五十音順の検索ができるようにする方法が ありますでしょうか?

  • perlとsqlに関する質問です。

    データベースからある情報を取り出すときに困っています。 取り出す条件を 一、order by 日付 二、group by 名前 の順に取り出したいのですが、うまくいきません。 どのように抜き出せばいいかわからないので、わかる方はご教授お願いします。 以下は大ざっぱな抽出部分のプログラムです。 $sth = $dbh("select * from table order by 日付カラム group by 名前カラム" limit 3,9") … よろしくお願いします。

  • mysql内データ検索結果の表示順について

    mysql内のデータを条件検索する時、検索結果の表示順を指定します。 新着順(id降順)で指定する場合のエラーについてアドバイスをいただけないでしょうか。 例えば、DB内データを降順で全件表示する場合は、 $query = "SELECT * FROM テーブル名 ORDER BY id DESC"; とすることでできると思います。 そこで、条件検索で結果表示をする場合は、上記の通りにしてもエラーが発生します。これについてのコードは以下のような感じです。 $query = "SELECT * FROM テーブル名 ORDER BY id DESC"; $where = array(); if (isset($_GET['area'])and($_GET['area'] !== '')) { $where[] = sprintf("(area='%s')", mysql_real_escape_string($_GET['area'])); } if (count($where) <> 0) { $query .= ' where ' . implode(' and ', $where); } これは、ORDER BY id DESCを書く位置が悪いのでしょうか? order by句は$query = select ~~~のあとに付けるという認識だったのですが、場合によって間違いとなるということなのでしょうか。 アドバイスをいただければ幸いです。

    • 締切済み
    • PHP
このQ&Aのポイント
  • 春に植えた2年生のヒサカキの葉にシワのような萎縮が見られます。葉裏に害虫はいないようですが、病気や害虫による被害かもしれません。対処法を知りたいです。
  • ヒサカキの葉にシワのような萎縮が見られますが、葉の変色はなく、土壌の水はけも良いです。葉裏に害虫は見えませんが、病気や害虫による被害かもしれません。対処法を教えてください。
  • ヒサカキの葉にシワのような萎縮が出てきました。シワの無い葉と混ざっています。葉裏に害虫は見えませんが、病気や害虫による被害かもしれません。対処法や原因について教えてください。
回答を見る