• ベストアンサー

SQLのテーブルの特定カラムでループ検索?

説明が苦手でご迷惑をおかけします。 [denwa_table] id name telno 1 田中 080888866XX 2 山田 090999988XX 3 佐藤 050333366XX このようなテーブルがあり、 別で取得した 「0125815846584123584090999988XX3254158912_3546842」 のような文字列にID何番の人の電話番号が含まれているか 検索するPHPを作成しています。 初心者なので、いろいろわからないのですが、 特に理解できていないのが複数行の配列の操作です。 $sql = "select telno from denwa_table"; 電話番号部分のカラムだけをとってきてとかやればいいのでしょうか? 検索する部分は strstr($data,$data2)を使ったらできそうですが、SQLからとってきた番号の配列をどうやってループさせたらいいのでしょうか? わからないことだらけなのですがよろしくお願いします。

  • PHP
  • 回答数5
  • ありがとう数3

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

  • ベストアンサー
回答No.4

PHPは普段使わないのでこれで出来るかわかりませんが 勉強がてらyyr446さんのサイトを参考に作ってみました。 実行環境がなくて動かしていませんが参考になれば幸いです。 <?php $mozi = '0125815846584123584090999988XX3254158912_3546842'; //$moziに電話番号が含まれるレコードだけ取得するSQL $sel = "select id,name,telno from denwa_table where replace('".$mozi."',denwa_table.telno,'') <> '".$mozi."'"; // SQL文を実行して結果を$resultに格納 $result = $db->query($logchksel); // SQL実行結果を格納する変数宣言 $id[] = null; $name[] = null; $telno[] = null; // selectの実行結果を一件ずつ取り出す while ($item = mysql_fetch_array($result)) { //取得してきたデータを変数に格納 $id[] = "${item['id']}"; $name[] = "${item['name']}"; $telno[] = "${item['telno']}"; // 取得してきたデータを表示 print(${item['id']}); print(${item['name']}); print(${item['telno']}); } //取得してきた内容の一件目だけ表示 print($id[0]); print($name[0]); print($telno[0]); ?>

その他の回答 (4)

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.5

No2です。 ご参考サイトは 私のサイトではありません。 紹介しただけです。あしからず

回答No.3

select * from denwa_table where replace('0125815846584123584090999988XX3254158912_3546842',denwa_table.TELNO,'') <> '0125815846584123584090999988XX3254158912_3546842'

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.2

何事も、まずは基礎からですよ。基本的な事を理解してから、DBアクセスにいどみましょう。 「特に理解できていないのが複数行の配列の操作です。」 「複数行の配列」って言葉の意味がとれませんよ。想像はできるけど、 ・配列とは何かとかその使い方 ・FORとかIFの構文 そういったところが、わかっていれば、DBからデータ抽出するサンプルコードなんて、たくさんありますからわかるようになります。 ご参考 http://www.standpower.com/index.html

marixka
質問者

お礼

お返事が遅くなりもうしわけありません。 基礎の理解が足りないようですね。もうすこし基礎の部分に目を通してみます。

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

SQLの種類によって処理はかわるでしょう? どちらかというとPHPは関係なさそうです。 たとえばMySQLなどは正規表現がつかえます。 http://dev.mysql.com/doc/refman/4.1/ja/regexp.html

marixka
質問者

お礼

mySQLなのですが、もう一度正規表現を含むところを勉強してみます。 お返事が遅くなり申し訳ありませんでした。

関連するQ&A

  • SQLの書き方

    電話番号がcsvファイルに000-0000-0000 という形で たくさん入っています。これをアクセスのフォームを使って 読み込んで、オラクルサーバーとつなげ、SQLを発行しています。 DB上には電話番後はtel1 000 tel2 0000 tel3 0000 というように、フィールドが分かれてハイフンなしで入っています。 これを抜くためにはどのようなSQLをかいたらいいのでしょうか? 苦し紛れに書いてみたSQLは select telno1_1||'-'||telno1_2||'-'||telno1_3 as TEL1,* from DB where TEL1 = '" & n1 & "'" というものです。 n1にはcsvから読み込んだ電話番号が000-0000-0000の形で入っています。 どなたか教えてください。 宜しくお願いします。

  • 2つのテーブル間でのあいまい検索について

    はじめまして、SQLを勉強はじめたばかりのものです。 現在2つのテーブル間であいまい検索を行いたいのです。 テーブル1 id 配列 1 ABCDEFG 2 HIJKLMN 3 OPQRSTU 4 VWXYZ12 テーブル2 id 配列 1 CDE 2 BCDEF 3 OPQR 4 HIJKLM 5 DEFG 6 VWXY 上記のような2つのテーブルで、実際は数万行あります。 LIKE演算子でテーブル2の配列情報を順次テーブル1に あてはめる方法がわかりません。 結果としては id  配列    id 配列 1 ABCDEFG   1 CDE 1 ABCDEFG   1 BCDEF . . . のようなテーブルが作成されることを期待しています。 SQLクエリだけでは作成は無理でしょうか? 上級者の皆様ご助言お願いします。

  • テーブル作成でカラム名で配列を

    MySQLを勉強している初心者です、よろしくお願いします。 テーブル作成時、カラム名を配列を使ってできないものでしょうか? (data1 data2 data3 data4 とするのが面倒なのですが) CREATE TABLE table_name ( code int(6) , data1[100] int(10) , data2[50] varchar(20) , data3[20] varchar(25)); ERROR 1064:You have an error in your SQL syntax. となります。 また二次元配列はどのようにしたらよいのでしょうか? よろしくお願いします。

  • SQLにて特定の文字を除いた検索する方法を教えてください

    SQLのSELECTで、電話番号などを検索する場合に、ハイフン(-)や、括弧を除いて検索する方法はありますか? たとえば、次のようなデータがある場合、1234567890のように、数値だけを入力して検索に引っかけたいのです。また、567890のみで後方一致をする際にも、ハイフンや確固がのぞければと思います。 1234-56-7890 1234(56)7890 良い方法があれば、教えてください。

    • ベストアンサー
    • MySQL
  • コラム名でテーブルを検索できますか?

    SQL & ORACLE初心者です。最近、セレクト文を使って、テーブル内のデータを取り出すことができるようになりましたが、逆にコラム名からテーブルを検索することはできるでしょうか。 例えば、TABLE_A内のコラムの中にCOLUMN_Aという名前のコラムがあるとして、このコラムが他のテーブルでも使われているかどうか、いるとしたらどのテーブルかを知りたいのです。また、COLUMN_Aと別のCOLUMN_B(それぞれが単独で記載されているテーブル名はわかっているとします)が一緒にある一つのテーブルで使われているかどうか、またそのテーブル名を知りたいときには、どのようなSQLを書けばよいでしょうか。 DBAやその他DBを構築するための知識をお持ちの方、ご回答をお待ちしています。

  • access2007 VBAでSQLのUPDATE

    access2007 VBAでSQLのUPDATEの使い方の質問です 下のような顧客テーブルがあり ID   担当者  会社名     電話番号   1    山田   XX産業     1234 2          株式会社XX  244343 3    山本   YY会社     432054 4    田中   XX商事     59680 5          TT工業     5493 6    佐藤   jj加工      54354 7          XX工務店   43202 8    湯浅   Xx工業 担当者列が空白の行を見つけ、上から2行目までの担当者列に中村と入力したいのですが 以下のようにしても上手くいきません。 ("UPDATE 顧客テーブル SET 担当者 = '中村' WHERE 担当者 IN (SELECT TOP 2 担当者 FROM 顧客テーブル)") 上記テーブルですと、ID2、5の担当者名が中村になるようにしたいのです。 どなたかお知恵をお貸しください。

  • SQL文 テーブルの作成方法について

    以下のようなTABLE1からTABLE2というテーブルを作成したいと考えております。 元テーブル(TABLE1)は、IDという項目がキーとなってデータが入っており、NAME1とNAME2という項目があります。 (NAME1は必ず値が入っていますが、NAME2は値が入っていない場合もあります) 加工後のテーブル(TABLE2)で、NAME1とNAME2の値を結合した形で結果を出力したいと考えております。 (新たに作成したNAMEカラムは、必ずしもユニークになっているとは限りません。NAMEとIDを組み合わせるとユニークになります) ---------------------------------------------------- ■ TABLE1 ID NAME1 NAME1_CATE NAME2 NAME2_CATE ---------------------------------------------------- 001 鈴木 A 山田 B 002 山本 A 003 佐藤 A 高橋 B ---------------------------------------------------- ---------------------------------------------------- ■ TABLE2 ID NAME NAME_CATE ---------------------------------------------------- 001 鈴木 A 001 山田 B 002 山本 A 003 佐藤 A 003 高橋 B ・・・ ---------------------------------------------------- いろいろ試していますが、どのようなSQL文を書いたらよいのか分かりません。 現状のSQL(エラーとなります) ====================================================================================== SELECT ID, NAME, NAME_CATE FROM (SELECT ID, NAME1 as NAME, NAME1_CATE as NAME_CATE FROM TABLE1 WHERE NAME1<>NULL) JOIN (SELECT ID, NAME2 as NAME, NAME2_CATE as NAME_CATE FROM TABLE1 WHERE NAME2<>NULL) ====================================================================================== 初歩的な質問になるかと思ってしまうかと思いますが、よろしくお願いいたします。

  • SQL文で複数列の更新をしたい。

    SQL初心者です。 全レコードを対象にNULLが入ってるフィールドを半角スペースに更新したいのですが、SQL文で記述するにはどうしたらいいのでしょうか? 例えば 氏名 住所  電話番号    誕生日   血液型 田中 渋谷  03-1234-1111  NULL    A 佐藤 新宿  NULL      19450412  NULL 鈴木 池袋  03-1234-2222  19700522  B            ↓ 氏名 住所  電話番号    誕生日   血液型 田中 渋谷  03-1234-1111        A 佐藤 新宿          19450412   鈴木 池袋  03-1234-2222  19700522  B こんな感じです。 知恵をお貸しください。よろしくお願いいたします。

  • SQLの外部結合について教えて下さい

    いつもお世話になっています。 SQL構文の外部結合が分らなくて困っています。 どうか教えて下さい。 JSPからString Nam = (request.getParameter("param"));で値を受け取ってその値でT_Tableと一致するデータのSQLを実行します。 SELECT * FROM T_Table where ID='"+ Nam +"' order by 日付 desc この結果とT_TableAの「番号」というフィールドと一致する問い合わせのSQLが分りません。自分なりに考えて作りましたがHTMLの部分の表示だけでレコードが表示されないので間違っているのだと思います。 色々調べてみましたが該当のサンプルがなかったので困っています。 教えて下さい!宜しくお願い致します。 【自分で作成してみたSQLです】 テーブルはSQL Serverです。 "SELECT * FROM T_Table where ID='"+ Nam +"' INNER JOIN where ID='"+ Nam +"' ON [T_Table].[番号] = [T_TableA].[番号] order by 日付 desc"

    • ベストアンサー
    • Java
  • DBから複数テーブルを早く表示するには?

    [table1] ID name age -------------- 01 太田 30 02 田中 58 03 鈴木 23 [table2] ID item01 ---------- 01 AA 02 CC 02 DD [table3] ID item02 ---------- 02 ee 02 ff 03 gg ASPを勉強中です。 oracleの[table1]~[table3](上記)を連結し、ASPで次の様なHTML(一覧表)を表示したいです。 ----------------- ID :01 name :太田 age :30 item01 :AA item02 : ----------------- ID :02 name :田中 age :58 item01 :CC、DD item02 :ee、ff ----------------- ID :03 name :鈴木 age :23 item01 : item02 :gg ----------------- 現在、ASPから「select * from table1」というSQL文をoracleに投げ、返されたダイナセットをVBScriptの「Do~Loop」で1レコードずつHTML表示しています。 item01を表示させる部分では「SELECT item01 FROM table2 WHERE id = table1のid」をoracleに投げ、返されたダイナセットすべてを表示しています。 (item02表示部分も同様) この方法では、1レコード表示毎にitem01,02部分で別のSQL文を走らせるので、100件程度のデータの表示に10秒近くかかってしまいます。 これを少しでも早くするにはどうしたらいいでしょうか? VBScriptの構文、SQLのこんなコマンドを使えば良い、oracleのテーブル内容の見直し、等々ご助言があればお願いします。 DB:Oracle9i サーバ:Windows2000 プログラム:ASP 接続環境:oo4o

専門家に質問してみよう