抽出時の条件指定についてわかる範囲で教えてください

このQ&Aのポイント
  • HTMLの入力欄に名前か電話番号を入れて抽出を行った場合、HITしたデータが名前であるか電話番号であるかを判別する方法について知りたいです。
  • 抽出時の条件指定についてわかる範囲で教えてください。
  • MySQLのクライアントバージョンは5.0.45です。
回答を見る
  • ベストアンサー

抽出時のことで質問です

こんにちは。 HTMLの入力欄を一つだけ用意して、そこに入れる検索条件の項目は 名前か電話番号 のような状態で抽出を行った場合 データがHITしたときに、どっちの項目でHITしたデータかというのは わかるものでしょうか $moji = $_REQUEST[moji]; //検索条件 SELECT * FROM table WHERE name LIKE '%".$moji."%' OR tel = '".$moji."' のようなSQL文を実行した場合、$mojiが「やまだはなこ」(名前)だと したら「nameでHIT」ということがわかるものかどうか、知りたいです 調べるにも言葉が浮かばず、困難だったので知ってらっしゃる人が いるかもと思い、質問に参りました OR検索で特定がムリなら、条件を一つにしたSQL文を複数書いて実行 という方法しか無いでしょうか MySQL クライアントのバージョン: 5.0.45です

  • MySQL
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

SELECT *,(name LIKE '$moji')+(tel = '$moji')*2 AS HIT FROM table WHERE name LIKE '$moji' OR tel = '$moji' ってするとHITには nameでヒットすると1、telでヒットすると2、両方でヒットすると3 がはいります。 あとはビット計算なので、もっと項目をふやすこともできるでしょう

koke29
質問者

お礼

素晴らしい回答ありがとうございます! LEFT JOINで二つのDBから検索を行っているためなのか、サンプルそのまま では上手く動かなかったので IF((name LIKE '$moji'),1,0)+IF((tel = '$moji'),2,0) AS HIT という文に書き換えたところ、無事動作しました!! 大変参考になるヒントを頂いて、大感謝です ありがとうございました♪

関連するQ&A

  • Access97での抽出

    検索フォームでデータを入力しテーブルを検索したいのですが、空データと空フィールドが等しいと判定されません。 今やりたいのは例えば ・名前 ・フリガナ ・TEL ・FAX のフィールドを持つテーブルがあり 検索フォームには ・名前orフリガナ ・TELorFAX の二つの欄をもうけておき ●「名前orフリガナ」が[名前]または[フリガナ]に一致 かつ ●「TELorFAX」が[TEL]または[FAX]に一致 上記のテーブルをクエリーなどで複合検索したいんです。 しかし「TELorFAX」[TEL][FAX]ともに空欄だと不一致の判定を受けてしまいます。 ちなみに上記のような比較が十項目ほどあります。 何かこのような場合によい方法はないでしょうか? 長くなってしまって済みません。

  • 期間限定の抽出 SQL 文を教えてください。

    MySQL を phpMyAdmin にて使用しています。 次のような項目があります。 bunrui varchar(5) kaisaibi date ここから下記の条件にてデータを抽出したいのですが、うまくいきません。条件を満たす SQL 文の書き方を教えてください。 条件1 kaisaibi が 2003年5月1日から2003年5月31日までの間で 条件2 bunrui が 04-01 または 06-01 であるもの。 SELECT * FROM `check_hiben` WHERE kaisaibi >= '20030501' AND kaisaibi <= '20030531' AND bunrui = '04-01' OR bunrui = '06-01' ORDER BY kaisaibi LIMIT 0 , 1000 上記の SQL 文を実行したところ、2003年5月以外のデータまで抽出されてしまいました。困っております。どなたかお助けください。よろしくお願いします。

    • ベストアンサー
    • MySQL
  • 一つのテキストフィールドで抽出データを変えたい

    いつもお世話になっております。 早速ですが、一つのテキストフィールドで2種類の抽出条件を検索したいのです。 sql="select * from A where (code>='" & str &"' or name>='" & str &"')" のようにSQLへ問い合わせしております。 ユーザーが検索するときにcodeで検索かけるかmameで検索かけるか分からないので、どちらが入力されても検索できるようにしたいのです。 ちょっと変わったことをしていまして、codeが「0123」以上のものまたはnameが「あああ」以上のものを検索したいです。 sql="select * from A where (code='" & str &"' or name='" & str &"')" のように一意のものを検索することは出来ております。 また、それぞれ sql="select * from A where (code>='" & str &"')" sql="select * from A where (name>='" & str &"')" ではどちらも検索出来ております。 これを上記のようにORでくっつけるとnameのほうだけ検索可になりました。 設定方法が間違えていますでしょうか? わかる方がいましたら、ご協力お願いします。

  • C#でアクセスからデータを抽出できません。

    アクセスのデータを部分一致の検索で抽出しようとしていますが、結果が0件になってしまいます。 作成したSQL文は以下のように作成しております。 string selectcommand = string.empty; string testid = "1"; selectcommand = string.Format("select * from TastTable where ID like '*{0}*'", testid); ・アクセスを開いて、結果が0件になるSQL文を直接入力して実行すると正しい結果が返ってきます。  (IDに1が含まれている行が全てヒットします。) ・上記SQL文の「'*{0}*'」を「'{0}'」とすると、ちゃんとIDが1の人のみヒットするので、*がいけない?  でもアクセスに直接SQL文を打ち込むと正しい結果が返ってくるのは何故でしょう・・・ 基本的な質問でしたら申し訳御座いませんが、宜しくお願い致します。

  • PHP postgresql 指定データの抽出

    sampleというテーブルに id name address tel という列があるとして、そこにいくつかのデータが入っています。 「id=1のtelのデータが欲しい」 というのはどう書けばいいのでしょうか。 $sql = sprintf("SELECT * FROM sample WHERE id ='1'"); $recordset = pg_query($sql); print($recordset['tel']); 上記を作ってみましたが、何が足りないのでしょうか。

    • 締切済み
    • PHP
  • SQL副問い合わせ

    下記の仕様で、SQLの検索を考えています。 DBのTable項目および画面の入力項目(Table名 : listing) CITYLIST1 CITYLIST2 CATEGORY-s1 CATEGORY-m1 CATEGORY-s2 CATEGORY-m2 EMAIL URL ※データ件数:約50000件 (1)CITYLIST1およびCITYLIST2でOR条件検索 (2)CATEGORY-s1およびCATEGORY-m1でAND条件検索 (3)CATEGORY-m2およびCATEGORY-m2でAND条件検索 (4)(2)、(3)の抽出結果でOR条件検索 (5)EMAILで検索 (6)URLで検索 (7) (1)、(4)、(5)、(6)でAnd条件検索 大変、副問い合わせが何十にもネストしてしまう複雑なSQL文しか思いつかないのですが、PHPでSQL文を組み立てる都合上、 比較的簡易的なSQL文が思いつくようでしたら、ご教示頂けないでしょうか?

    • ベストアンサー
    • MySQL
  • 「・」中点が入った文字列を条件にするとデータを抽出できないです

    「・」中点が入った文字列を条件にすると データを抽出できないです。 うまくいかない例 ------------------------------------------- $name = "春・春・春"; $Sql = "SELECT * FROM TestList"; $Sql .= " WHERE SpName = '".$name."'"; ------------------------------------------- 条件を変数に格納してSQL文に渡すと何も抽出できません。 しかし↓のようにSQLに直に「春・春・春」とすると うまくデータが抽出されます。 うまくいった例 ------------------------------------------- $Sql = "SELECT * FROM TestList"; $Sql .= " WHERE SpName = '春・春・春'"; ------------------------------------------- また「・」中点がない条件では変数で渡しても データがうまく抽出されます。 どうしたら「・」中点が入っている条件を 変数に格納してSQLに渡しても うまくデータが抽出されるでしょうか? どなたかご教示いただけますと助かります。 よろしくお願いします。

  • 日付型(時刻含む)を抽出条件にして行を抽出したい。

    はじめまして、よろしくお願いします。 現在SQLサーバー2000を使用してこの処理を行おうと思っております。 一度テーブルに格納したデータをSELECT文を使って抽出したい と思っているのですが、WHERE条件に日付型のフィールドを指定するとうまく行きません。(時刻が日付型のフィールドに入っている場合、うまくいきません。) やっていることは YMD(DATE型・主キー)、ID(VERCHAR型・主キー)、NAME(VERCHAR型) というのテーブル(テーブル名:MEIBO)に入っている 2002/02/02 14:10:55、0001、山田 太郎 というデータを 取込年月日、個人IDを指定して特定の列を取り出そうとしています。 SQL文は SELECT * FROM MEIBO WHERE YMD = '2002/02/02 14:10:55' AND ID = "0001' と記述していますが、一件もヒットしません。 DATE型のフィールドにはINSERTするときにGETDATE()をつかってシステム日付を 格納するようにしています。 GETDATE()ではなく、DATE()を使ってシステム日付を格納した 2002/02/02、0001、山田 太郎 という時刻の入っていないデータに対しては SELECT * FROM MEIBO WHERE YMD = '2002/02/02' AND ID = "0001' というSQL文でヒットするのですようです。 時刻が入ったらそのフィールドを抽出条件として使うことは無理なのでしょうか? 基本的な部分で勘違いしているのかもしれませんが なにかお気づきの点がありましたら、ご教授ください。

  • オラクル10gで開発を行っています。文字コードはJA16SJISTIL

    オラクル10gで開発を行っています。文字コードはJA16SJISTILDEです。 現在、テーブルの中には条件なしで様々な文字種類のデータが入っているとします。 全角ひらがな・カタカナ、半角数字・カタカナ、全半角英字・記号等です。 例えば”アイウエオ”を含む文字列を検索するselect文を実行したとき、 以下のようなものがヒットします。 ”アイウエオ” ”アイウエオ” ←半角カタカナ ”あいうえお” ←ヒットしてもしなくてもよい。 例えば”ガギグゲゴ”を含む文字列を検索するselect文を実行したとき、 以下のようなものがヒットします。 ”ガギグゲゴ” ”ガギグゲゴ” ←半角カタカナ ”がぎぐげご” ←ヒットしてもしなくてもよい。 例えば”&”を含む文字列を検索するselect文を実行したとき、 以下のようなものがヒットします。 ”&” ”&”←半角記号 要は、何が言いたいのかいいますと、全角文字の文字列で検索を行ったとき、 全角・半角の区別をしないで検索結果を得るSQL文を考えています。 どのようなSQLにすればよいのかアドバイスをお願いします。 もし、SQL文のみでは実現不可能であれば、●●●といった形で検索結果を 得てそのうち△△△に該当するデータを抽出するといった複数ステップを踏む 方式でも構いません。

  • PHP初心者です。

    PHP初心者です。 index.php から外部関数に飛び、文字列を返してきてindex.phpで それらの文字列を表示するプログラムはどのように書けばいいんでしょうか? /* ---func1.php--- */ function func1($aa,$bb){ $moji=""; $moji.= "ああ".$aa."ああ"; $moji.= "いい".$bb."いい"; //$mojiの内容を返す } /* ---func2.php--- */ function func2($cc,$dd){ // DBからデータを取得して $sql = "SELECT name, add, mail, tel FROM tbl_a WHERE cc = ".$cc; $moji_db = ""; $result = mysql_query($sql); while ($row = mysql_fetch_assoc($result)){ $moji_db .= $row['name']; $moji_db .= $row['add']; $moji_db .= $row['mail']; $moji_db .= $row['tel']; } //$moji_dbを返す } index.php で $mojiと$moji_dbを出力する 以上のようなプログラムなんですけど、 func1,2の戻り値の書き方、index.phpでの受け取り方がわからないので教えてください。

    • ベストアンサー
    • PHP