アプリ版:「スタンプのみでお礼する」機能のリリースについて

If name1<>"" Then SQL = SQL & " AND name1 LIKE '%" & name1 & "%'"

これで、スペース区切りでも検索できるようにするには?
テキストなど見てみるとすごく長くなってしまってるんですが、
簡潔に記述できるものはないでしょうか?
よろしくお願いいたします~。

A 回答 (8件)

こんにちは。



>>これで、スペース区切りでも検索できるようにするには?
データと検索条件の相関関係をもう少し具体的にお願いします。
後、「スペース区切り」とはどのような状況ですか?
(^^ゞ

この回答への補足

早速レスいただき、有り難うございます(^_^)

スペース区切りですけど、
例えですけれども、"日本東京お台場"という文字があるとします。
検索をかける際に
"東京 お台場"と入力しても、"東京日本お台場"が出るようにしたいのです。
ご指導よろしくお願いいたします~!

補足日時:2004/11/16 15:34
    • good
    • 0

こんにちは。



条件側が「スペース区切り」で、いわゆる「絞り込み検索」ですね。

この場合、検索条件をスペースで区切って、それぞれ変数に入れなければいけません・・・。
そして、変数が「NULL」でない場合だけ、ANDでWHERE句を足していきましょう。

"東京 お台場"と入力。
変数(または配列でも可)に、スペース区切りで代入(この時、スペースを削除する)。
それぞれの変数(または配列のN番目)がNULLでない場合のIF文で、AND条件をくっつける。

こんな感じかと思います。
なんとなくわかります?
(^^ゞ
    • good
    • 0
この回答へのお礼

ご丁寧に有り難うございます!

お礼日時:2004/11/18 11:18

こんな感じでどうでしょうか?



If name1<>"" Then
 name1Tmp = Split(name1," ")
 For i = 0 to UBound(name1Tmp)
  SQL = SQL & " AND name1 LIKE '%" & name1Tmp(i) & "%'"
 Next
End If

この回答への補足

うおお~!できました!有り難うございます(泣)
あとおひとつ、お伺いしてもよろしいでしょうか?(汗)
『半角スペース』でも、『全角スペース』でも対応するにはどうしたらいいのでしょうか?
度重なる質問で、申し訳ございません。

補足日時:2004/11/17 14:11
    • good
    • 0

>『半角スペース』でも、『全角スペース』でも対応するにはどうしたらいいのでしょうか?



全角スペースを半角スペースに置換してからSplitで出来ると思います.

If name1<>"" Then
 name1Tmp = Split(Replace(name1," "," ")," ")
 For i = 0 to UBound(name1Tmp)
  SQL = SQL & " AND name1 LIKE '%" & name1Tmp(i) & "%'"
 Next
End If

この回答への補足

す・・すごいです。勉強になります有り難うございます!
心よりお礼申し上げます。

あと、最後にひとつだけ教えていただきたいところがあるのですが、、、

http://kototoi.dl.itc.u-tokyo.ac.jp/opac/help/ex …

ここの出版年のところの、
← 1990年から1995年に出版された資料に限定する。という方法も
上記のやり方で可能でしょうか?

補足日時:2004/11/17 15:21
    • good
    • 0
この回答へのお礼

最終形態は、そのようにしたいと考えております。
お忙しいところ、私などの質問に答えていただき本当に有り難うございます。

お礼日時:2004/11/17 15:27

>1990年から1995年に出版された資料に限定する。

という方法も
>上記のやり方で可能でしょうか?

数値の比較になるので,文字列検索のLIKEとは違いますね.

検索文字列をname1に格納したように,出版年の下限をshuppan1 上限をshuppan2とでもして

If shuppan1<>"" Then
 SQL = SQL & " AND 出版年 >=" & shuppan1
End If

If shuppan2<>"" Then
 SQL = SQL & " AND 出版年 <=" & shuppan2
End If

のようにしてみてください.

この回答への補足

ご丁寧に、
有り難うございます。ペコリ。
これは、もう何もbetweenなど範囲の指定?など
しなくてもいいのでしょうか?
すいません、よく理解していないもので(^^;)

補足日時:2004/11/17 16:29
    • good
    • 0

>これは、もう何もbetweenなど範囲の指定?など


>しなくてもいいのでしょうか?

出版年の上限と下限が必ず入力されるのであれば

SQL = SQL & " AND 出版年 between " & shuppan1 & " and " & shuppan2

でOKです.

先の例は入力フォームで片方,あるいは両方が空白のまま送信された場合を考慮して,わざわざIf文を付けています.

この回答への補足

なるほど…有り難うございます!

>
>If shuppan1<>"" Then
> SQL = SQL & " AND 出版年 >=" & shuppan1
>End If
>
>If shuppan2<>"" Then
> SQL = SQL & " AND 出版年 <=" & shuppan2
>End If

でやろうと思います。
DBはMDBで、MDBの・・・出版年のフィールド名のところは、"shuppan1"という名前になっているのです…。

これでは、
If shuppan1<>"" Then
SQL = SQL & " AND 出版年 >=" & shuppan1
End If

の、shuppan1という名前が重なってしまってるんで"shuppan1"を"shuppan11"としました。(もちろんテキストの名前も変更しています。)
が検索されません。


説明といたしましては
textに入れた名前からmdbを呼びに行くのは

shuppan11= Request.QueryString("shuppan1")
shuppan2= Request.QueryString("shuppan1")
という風に変えてやっているのですが、
クエリを呼び出す際に何も反応がおこりません。
やはり、どこか変数が間違っているということなんでしょうか?

これだけで推測不可能(だと思いますが…)でしたら、何なりとお申し付けください。

補足日時:2004/11/18 09:47
    • good
    • 0
この回答へのお礼

省略ですが、簡単な流れです・・
点線で区切ってますが、すべてつながっています。


'入力フォームの内容を取得、変数に代入
pass1= Request.QueryString("pass1")
shuppan11= Request.QueryString("shuppan1")
shuppan2= Request.QueryString("shuppan1")

'------------------------------------------------

'データベースと接続
Set db = Server.CreateObject("ADODB.Connection")
db.Open "nedandb"

SQL = "SELECT * FROM nedandb WHERE id 'IDが入ってないとSQL文が発行されない

'------------------------------------------------

'MDBから抜き出してきたいフィールド名は『shuppan1』
'『shuppan11』~『shuppan2』に入力した数字を検索したい

If shuppan11<>"" Then
 SQL = SQL & " AND shuppan1 >=" & shuppan11
End If

If shuppan2<>"" Then
 SQL = SQL & " AND shuppan1 <=" & shuppan2
End If

'------------------------------------------------

SQL = SQL & " ORDER BY hp_date DESC" '日付の新しい順に並べる
'SQL文を実行してレコードセットを取得
Set rs = db.Execute(SQL)
%>

'------------------------------------------------

'検索結果の表示
 SQL : <%= SQL %><P>
 検索条件 本:"<%= nedan11 %>"

こんな感じの記述です。
どうも、この記述ですとSQL文が発行されないのです。
しかし、

If namae<>"" Then
namaeTmp = Split(Replace(namae," "," ")," ")
For i = 0 to UBound(namaeTmp)
SQL = SQL & " AND namae LIKE '%" & namaeTmp(i) & "%'"
Next
End If

namaeだけだと
namae= Request.QueryString("namae")
と指定しやすいのでできています。
もしかして、この変数の時に私の設定が間違えているのかと考えたのですが
いろいろやっても解決されませんでした。。

長くてすいません。

お礼日時:2004/11/18 11:15

>shuppan11= Request.QueryString("shuppan1")


>shuppan2= Request.QueryString("shuppan1")

Request.QueryStringで受け取ることが出来るのは,フォームからgetで送られた値です.
postならRequest.Formになります.

入力フォームの出版年を入れるところが

<input name="shuppan1" type="text">以降
<input name="shuppan2" type="text">以前

のようになっているとして

shuppan1 = Request.QueryString("shuppan1")
shuppan2 = Request.QueryString("shuppan2")

で受け取れます.

偶然にもデータベース側の出版年がshuppan1と言う名前なのでしたら

shuppan11 = Request.QueryString("shuppan1")
shuppan2 = Request.QueryString("shuppan2")

としても良いですが,入力フォーム側の名前がどうなっているのか確認してください.

この回答への補足

入力フォーム側の名前とは
<input name="shuppan1" type="text">以降
<input name="shuppan2" type="text">以前
のことでよろしいですよね?

補足日時:2004/11/18 13:12
    • good
    • 0

# 入力フォーム側の名前とは


# <input name="shuppan1" type="text">以降
# <input name="shuppan2" type="text">以前
# のことでよろしいですよね?

name="名前"
の形で記述した部分です.

<input type="text">
がテキストボックスを表し
それに名前を付けたりサイズを指定する場合は
<input name="namae" type="text" size="10">
のように書きます.

最初の質問内容である絞込みの回答から
派生した質問が次々と出て来て収集が付かなくなりつつあるので,一旦この辺で区切りを付けて,新たな質問は別途改めてと言うことでいかがでしょうか?
    • good
    • 0
この回答へのお礼

そうですね。
有り難うございました!
感謝いたします!!

お礼日時:2004/11/18 14:24

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!