![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
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で質問しましょう!
似たような質問が見つかりました
- その他(データベース) Accessのクエリで1フィールドの抽出条件設定をNullでなく全角半角含む空白のみの文字列でない文 1 2023/04/24 15:20
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- Oracle sqlで質問です。 aテーブルとbテーブルがあり、下記のsqlで取得したidとnameに一致しないレ 1 2022/04/20 20:34
- Visual Basic(VBA) VBA初心者です 検索した数字の行に色をつける 5 2023/02/13 14:22
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
- PHP コメント機能に返信欄を矢印で追加したい 1 2022/05/09 21:17
- PHP 重複を防ぐ記述について教えて下さい。 3 2023/04/03 14:35
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- UNIX・Linux ワイルドカードの使い方 4 2023/08/08 20:51
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQL文で右から1文字だけ削除す...
-
割合(パーセント)を求めるに...
-
MySQL 副問い合わせ(IN)での...
-
【MYSQL】asでリネームしてwher...
-
大至急!!!DBに存在する全表...
-
使うべきでない文字。
-
重複が
-
MySQLで変数やループ、上位3名...
-
MySQLで MAX()とGROUP BYを使う...
-
カウント結果を1レコードの中...
-
初心者Mysqlの関数のsubstring...
-
何にかが違うから エラーなんで...
-
条件検索の方法について
-
Access でレコードセレクタが押...
-
Accessで別テーブルの値をフォ...
-
Oracleでの文字列連結サイズの上限
-
GROUP BYを行った後に結合した...
-
ちなみになぜv=(v・e1)e1+(v・e...
-
ACCESSで大量の更新を行うと「...
-
エクセル関数 文字(ハイフン...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SQL文で右から1文字だけ削除す...
-
【MYSQL】asでリネームしてwher...
-
使うべきでない文字。
-
割合(パーセント)を求めるに...
-
チェックボックスの項目をDBにi...
-
カウント結果を1レコードの中...
-
SQLの集計で「全て」の合計も表...
-
月別、販売員別の集計がわかり...
-
sum()の出力結果順に並び替えを...
-
MySQLで MAX()とGROUP BYを使う...
-
【初歩】ラジオボタンをつかっ...
-
何にかが違うから エラーなんで...
-
複数の表の条件でのDELETE文
-
replaceした上でwhere
-
LIKE述語/SQLとPHPを使った検...
-
今週の日曜日から土曜日までの...
-
重複が
-
MySQLにて特定レコードのみを抽...
-
MySQLで2つのテーブルのデータ...
-
phpmyadminはトリガーやIF文を...
おすすめ情報