No.3ベストアンサー
- 回答日時:
select * from test where
'ももたろうは鬼をたいじしました' like concat(name,'%')
とすればよいですが、SQL的にはかなり効率がわるいので実用に
耐えないかもしれないですね。
この回答への補足
concatという関数があったのですか!
a like 'b%' の真逆のsqlが 'b' like concat(a'%') で発行できるのですね、すばらしいです。
>>SQL的にはかなり効率がわるいので実用に耐えないかもしれないですね。
NO2さんの方法と、NO3さんの方法のどちらでも期待通りの動作が実現できるのですが、どちらの方法が適しているでしょうか? それとも、違う方法を考えたほうがよろしいでしょうか?
ps. アクセス集計サイトはどのようにドメインを取得しているのでしょうかね・・・、疑問です。
No.4
- 回答日時:
#1、#2回答者です。
検索条件で列名(今回の場合は、name列)を加工(部分抽出など)せずに条件式に指定することで、インデクスを利用できるかと思ったのですが、explainの結果では#2回答のような指定でもMySQLではインデクスを利用してくれないようです。
したがって、今回のような操作では、母体件数に比例して処理時間がかかります。
そういう点に留意した上で、実装して良いかの判断をしてください。
No.2
- 回答日時:
#1回答者です。
文章から、キーワードを検索するのですか?
すごい発想ですね。
キーワードから文章を検索するというのが、普通の発想なのですけどね。
文章の先頭には、必ず検索したいキーワードがあるのでしょうか?
例えば、
「○○○は~」
「××を~」
といった形式でしょうか?
あと、これは趣味などで行うのでしょうか?
もし仕事なら、発想を考え直したほうがいいです。
以上の条件がOKなら、以下のSQLで希望の結果を得られると思います。
===表定義例===
create table test
(id int,
name varchar(30));
===格納データ例===
insert into test values
(1,'いちご'),(2,'みかん'),(3,'ぱいなっぷる'),(4,'もも'),(5,'ももたろう');
===検索SQL例===
select id,name
from test
where name=substring('ぱいなっぷるはコンビニに100円で売っています',1,char_length(name));
select id,name
from test
where name=substring('いちごがむを昨日食べました',1,char_length(name));
select id,name
from test
where name=substring('ももが大好きです',1,char_length(name));
select id,name
from test
where name=substring('ももたろうは鬼をたいじしました',1,char_length(name));
この回答への補足
char_length(name)でnameの長さを取得して、substringでキーワードを切るのですか! いやすごいです、sqlでこんな方法があるとは知りませんでした。
実は、自分のHPのリンク集に載っているサイトのみを対象とした逆アクセスランキングを、phpとmysqlを用いて設置しようと思いたちました。
sitename url count
------- ---------------- -------
あ http://aaa.com/ 10
い http://bbb.com/ 8
う http://ccc.com/sub1/ 15
え http://ccc.com/sub2/ 15
実装にあたり、リファラー( http://aaa.com/aa.html 、 http://aaa.com/aa.php?hoge=7 など) と データベースフィールドurlとの関連付けが必要なのですが、リファラーを直接データベースフィールドurlにヒットさせることができれば、カウントアップ等のプログラムを一番手っ取り早く作れますので、どうにかできないものかと当質問をさせていただきました。
>> もし仕事なら、発想を考え直したほうがいいです。
仕事というわけではないのですが、この方法はやめたほうがよろしいでしょうか? たしかに、すべてのurlに対し char_length と substring を施すので、リンク数が多くなると、動作が重くなるような気がします。(sqlは詳しくないので、なんともいえませんが・・・)
No.1
- 回答日時:
質問内容が不明確です。
検索する基の表のデータと、得たい結果を示すと、回答する側も分かりやすいです。
>では、フィールド (name) に「いちご」「みかん」があるとします
これは、格納済データのことですよね?
この文と、この文以降は、どういう関係があるのでしょうか?
>検索文字『いちごがむ』(もしくは『いちごじゅーす』)からnameの「いちご」箇所を抽出するには
最初に示された
「SELECT * FROM test WHERE name LIKE 'いちご%'」
で検索した結果から、「いちごがむ」といった列値が検索された場合、「いちご」部分だけを抜き出したいのですか?
MySQLのバージョンは、何ですか?MySQLでは、4.0以前と4.1以降で、この辺の仕様が変わっています。
「いちご」部分だけを抜き出したいなら、
MySQL 4.0までなら、「select substring(name,1,6) from ~」
MySQL 4.1からは、「select substring(name,1,3) from ~」
といった記述で可能です。
意図が違っていたら、補足説明してください。
この回答への補足
質問内容が不明確で申し訳ありませんでした。MySQLのバージョンは5.0です。
テーブル名 test
id name
---- ---------
1 いちご
2 みかん
3 ぱいなっぷる
4 もも
5 ももたろう
---- ----------
以上のテーブルがある場合、
『ぱいなっぷるはコンビニに100円で売っています』という検索文字では「3,ぱいなっぷる」がヒット。
『いちごがむを昨日食べました』という検索文字では「1,いちご」がヒット。
『ももが大好きです』という検索文字では「4,もも」がヒット。
『ももたろうは鬼をたいじしました』という検索文字では「4,もも」と「5,ももたろう」がヒット。
このような検索結果が得られるには、どのようなSQL文になるのか知りたかった次第であります。ちなみに、検索は前方一致(最初の文字列が同じならヒット)を望んでいます。
よろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
MySQL関数max()を条件にSELECT...
-
【初歩】ラジオボタンをつかっ...
-
SQL文で右から1文字だけ削除す...
-
【MYSQL】asでリネームしてwher...
-
MySQLで MAX()とGROUP BYを使う...
-
sum()の出力結果順に並び替えを...
-
チェックボックスの項目をDBにi...
-
使うべきでない文字。
-
カウント結果を1レコードの中...
-
LIKE述語/SQLとPHPを使った検...
-
姓名の前後を入れ替えるSQL命令...
-
割合(パーセント)を求めるに...
-
Oracleでの文字列連結サイズの上限
-
GROUP BYを行った後に結合した...
-
select insertで複数テーブルか...
-
Accessで別テーブルの値をフォ...
-
Access終了時の最適化が失敗?
-
DataGridViewにてセル以外をク...
-
ワードの差込印刷で教えて下さ...
-
SELECTの結果で同一行を複数回...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SQL文で右から1文字だけ削除す...
-
【MYSQL】asでリネームしてwher...
-
使うべきでない文字。
-
sum()の出力結果順に並び替えを...
-
MySQLで MAX()とGROUP BYを使う...
-
【初歩】ラジオボタンをつかっ...
-
MySQL のデータからドロップダ...
-
チェックボックスの項目をDBにi...
-
月別、販売員別の集計がわかり...
-
カウント結果を1レコードの中...
-
何にかが違うから エラーなんで...
-
SQLの集計で「全て」の合計も表...
-
割合(パーセント)を求めるに...
-
MySQL 副問い合わせ(IN)での...
-
LIKE述語/SQLとPHPを使った検...
-
MySQLにて特定レコードのみを抽...
-
MySQLで2つのテーブルのデータ...
-
初心者Mysqlの関数のsubstring...
-
サブクエリ内で INNER JOIN は
-
条件検索の方法について
おすすめ情報