dポイントプレゼントキャンペーン実施中!

PHPとMySQLで構築するという内容の参考書2冊を読んだ程度の知識レベルです。しばらくPHPと離れていたので、さらに退化しているかもしれません。。。
環境はWindowsXP、PHP4.3.2.2です。
ぜひ、皆さんの知恵をお借りできればと思い、質問をさせていただきます。

DBには 
発売日(outday) お菓子名(name) 発売店(shop) などが入っております。
発売日やお菓子名、発売店など1つ~3つの条件で検索することが目的です。

例えば、お菓子名のみの検索をしようとして、

HTMLフォーム
<INPUT size="44" type="text" name="name" maxlength="100">
↑に検索したいお菓子名を記入して、

$sql="select * from okashiwhere (name like '%$name%') order by outday;
↑でnameのデータを受けとって、欲しいお菓子データを取り出すことはできたのですが、

↓のように
<INPUT size="44" type="text" name="shop" maxlength="100">; <INPUT size="44" type="text" name="name" maxlength="100">;
フォームを2つ作り


$sql = "select * from okashi
where (shop like '$%shop%') and
(name like '%$name%')by outday;

↑のように2つ以上の検索条件が重なると、
「0件」みつかりました。と検索が出来なくなってしまいます。

検索条件は、検索項目が1つでも2つでも同じ同一です。

 
本に書いてあるまま、名前を換えて動かしているつもりなのですが、
どこが間違っているか本当に分かりません。

文字制限で全体を載せることができず、はしょってしまいましたが、
わからない点がありましたらおっしゃってください。


お忙しい中恐れ入りますが、ぜひ皆さんのお知恵をお借りしたいのです。
よろしくお願いします。

A 回答 (4件)

> 0 toppa 全店 20070116


> 1 焼マロン 南店 20060130
> 2 魚くん 岡山店 20060607
>
> 1つの項目だけのときは「焼きマロン」
> 2つの項目には「焼きマロン」「南店」と入れました。

ここは大事なところですから、厳密な話をしましょう。
「焼きマロン」の「き」はあるのが正しいですか?ないのが正しいですか?

また、
select * from okashi where shop like '%山%' and name like '%く%';
というSQL文をコマンドプロンプト上で実行したとき、
2 魚くん 岡山店 20060607
のレコードがヒットしますか?
    • good
    • 0
この回答へのお礼

本当に早いお答えありがとうございますっ。

申し訳ありません。
「焼マロン」が正しいです。
ご指摘ありがとうございます。 

コマンドプロンプトで
select * from okashi where shop like '%山%' and name like '%く%';
では
Empty set (0.01 sec)
との結果でしたが、

select * from okashi where (name like '%山%') and (shop like '%く%') ;
と記入したところ

+----+--------+--------+----------+
| no | shop | name | outday |
+----+--------+--------+----------+
| 2 | 魚くん | 岡山店 | 20060607 |
+----+--------+--------+----------+
の結果が得られましたっ。


ご教授よろしくお願いいたします。

お礼日時:2007/03/15 10:08

> | 2 | 魚くん | 岡山店 | 20060607 |



この結果を得たということは、プログラム上で
select * from okashi where (name like '%山%') and (shop like '%く%') ;
というSQL文をうまく発行できさえすれば、
少なくとも1件はヒットするということですよね。

PHPスクリプトでSQL文を生成したり実行したりしている箇所や、
HTMLでフォームを作っている箇所を見せてくだされば、
何かわかるかもしれません。
    • good
    • 0
この回答へのお礼

おはようございます。
いつもご返答いただきましてありがとうございます。

select * from okashi where (name like '%山%') and (shop like '%く%') ;
で反応が返ってきたことに感動し、PHPの全文を見直しました。

間違っている箇所は無いと思っていたのですが、
$が抜けている箇所が2点有り、
修正したところ2個以上の条件で検索ができるようになりました!!!

何度も丁寧なご指導いただきましてありがとうございます。
本当に助かりました。
これからはもっと自分の間違いを疑って、しっかり見直しをいたします。
本当に、ありがとうございます!!

お礼日時:2007/03/16 08:49

回答1の者です。



> コマンドプロンプトで同じく行ってみましたが、
> 0件でした。。。

そのwhere句を満たすデータは、okashiテーブルの中に
間違いなく存在しますか?
差し支えなければ、2~3件くらいでよいですから、okashiテーブルの
内容を見せてくださると、「このSQL文はOK」とか「このSQL文はNG」とか
いう話がしやすいように思います。
    • good
    • 0
この回答へのお礼

ご返答ありがとうございますっっ。

okashiのテーブルはこのように成ってます
(nonameshopoutday)←フィールド名です
0toppa全店20070116
1焼マロン南店20060130
2魚くん岡山店20060607




このような内容が46件登録されています
検索には
1つの項目だけのときは「焼きマロン」
2つの項目には「焼きマロン」「南店」と入れました。

お忙しい中、ありがとうございます。
よろしくお願いいたします。

お礼日時:2007/03/15 08:23

> $sql = "select * from okashi


> where (shop like '$%shop%') and
> (name like '%$name%')by outday;

間違いなく、このとおりになさっていますか?だとすると、
・2行目の $%shop% は、%$shop% が正しいのではありませんか?
・3行目の by の前に order が必要ではありませんか?

また、フォーム上で入力したのと同じ条件を用いて、
コマンドプロンプトからMySQLを使ったとき、検索結果はゼロ件ですか?
それとも何件かヒットしますか?
    • good
    • 0
この回答へのお礼

早速のお答えありがとうございます!!!

>・2行目の $%shop% は、%$shop% が正しいのではありませんか?
>・3行目の by の前に order が必要ではありませんか?
おっしゃるとおりでした。
ありがとうございます。早速修正いたしました。

修正いたしましたが、やはり・・・ヒットいたしません。

コマンドプロンプトで同じく行ってみましたが、
0件でした。。。

すいません、お忙しい中恐れ入りますが
御教授よろしくお願いいたしますっっ

お礼日時:2007/03/14 21:50

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