比較不可能な問題を解決する方法

このQ&Aのポイント
  • テーブルAとテーブルBのデータを比較する際に、曖昧さが生じる問題があります。この記事では、曖昧な比較を可能にする方法について解説します。
  • まず、テーブルAには食べ物の日本語名が、テーブルBには食べ物の日本語名、英語名、産地などが入っています。テーブルAとテーブルBの食べ物英語名を一致させる方法を紹介します。
  • 具体的な手順は以下の通りです。まず、テーブルAの日本語名とテーブルBの日本語名を比較し、一致するものを抽出します。その後、ループを使用して一致した項目の英語名を出力します。エラーの原因として、パースエラーが発生した可能性があります。解決策として、文法や構文エラーをチェックし、正しい書式に修正してみてください。
回答を見る
  • ベストアンサー

曖昧に比較って出来ませんか?

テーブルAに食べ物の日本語名が入っており テーブルBには食べ物の日本語名、食べ物の英語名、産地などが入ってます。 テーブルAの日本語名と同じ名前のテーブルBの食べ物英語名を出力したいのです。 やり方がわからずとりあえず、物は試しで like % %を使ってみました。 テーブルAの日本語名の値をtableA[hapan] テーブルBの日本語名の値をtableB[japan] に代入し ループで if(like '%tableA[hapan]%'=tableB[hapan])を行ったのですが Parse error: parse error, unexpected T_STRINGとエラーでした。 ご教授お願いいたします。 よろしくお願いいたします。

  • PHP
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.2

これでどうでしょう。 $a = テーブルA[日本語]; $b = テーブルB[日本語]; $pos = strpos($b, $a); if ($pos === false) { # HITしない } else { # HITした } http://php.benscom.com/manual/ja/function.strpos.php

neko0001
質問者

お礼

ありがとうございます!!!!!! 出来ましたっっっ。 本当にありがとうございます!!

その他の回答 (1)

  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.1

select [英語名] from tableA left join tableB on hapan = japan; あ、SQLじゃないのか。 テーブルというか、配列でしょうか? $tableA = array(); $tableB = array(); $tableA[] = '日本名'; $tableA[] = '日本名'; ・・・ $tableB[] = array('日本名','英語名','産地'); $tableB[] = array('日本名','英語名','産地'); ・・・ としましょうか。 foreach($tableA as $a){ foreach($tableB as $b){ if ($a == $b[0]) { print $b[1]; } } } と、こんな感じでしょう。

neko0001
質問者

お礼

ご教授ありがとうございます。 すいません。 情報を書きわすれておりました。 MySQLでデータを呼び出します。 そして テーブルAの日本語は「1222日本語名.pdf」 4桁の日付+日本語名+pdfから成り立っております。 テーブルBの日本語「日本語名」 日本語名のみと成っております。   テーブルBとテーブルAの日本語を比較したいのですが・・・ if(テーブルA[日本語]==テーブルB[日本語])だと 完全一致になってしまい、 結果が0と成ってしまいました。 テーブルAの日本語の部分だけ比較って出来ませんでしょうか?

関連するQ&A

  • mySQLで友人とのポイント比較

    下記のようなテーブルがあります。 【tableA】 tableAは、各ユーザーが友人として登録しているリストです。 ID_A が本人名、f1~f5 が友人登録リストです。 鈴木さんは、友人として「横田さん、小森さん、原さん」の3人を登録していることになります。 【tableB】 tableBは各人が保有しているポイントです。 この2つから、「自分及び登録した友人とのポイント比較画面」を作りたいと思っています。 ************************************ tableA ID_A f1 f2 f3 f4 f5 suzuki yokota komori seki yokota komori hara yokota hara seki komori hara seki komori hara ************************************* tableB ID_B point suzuki 550 yokota 400 hara 250 komori 350 seki 600 honda 520 ************************************* やりたいこと IDをベースに自分、及び友人の点数を羅列させたい 欲しい結果 tableB.ID_B = 'suzuki' の場合 suzuki 550 yokota 400 komori 350 seki 600 tableB.ID_B = 'yokota' の場合 yokota 400 komori 350 上記のSQLを組むことができません。 お知恵を拝借したくお願い申し上げます。 当方が組んだSQLです。膨大な羅列が返ってきました。(汗) SELECT tableB.ID_B,tableB.point from tableA,tableB WHERE (tableA.ID_A=tableB.ID_B or tableA.ID_A=tableB.f1 or tableA.ID_A=tableB.f2 or tableA.ID_A=tableB.f3 or tableA.ID_A=tableB.f4 or tableA.ID_A=tableB.f5) and AND tableB.ID_B = 'suzuki' 宜しくお願い致します。

    • ベストアンサー
    • MySQL
  • テーブルの内容で更新したいのですが

    下記のようにテーブルがあります。 TableA colA colB ---- ----  A   1  B   2  C   3 TableB colA colB ---- ----  A   1  A   2  C   3 TableAに対してTableBとcolAが一致するcolBの合計を加算したいのです。 結果として TableA colA colB ---- ----  A   4  B   2  C   6 AはTableBに2レコードあるので合計3が加算されて4 BはTableBにレコードがないので変わらず2 CはTableBに1レコードあるので3が加算されて6 SQLでこのような更新処理(update)はできないでしょうか? よろしくお願い致します。

  • 異なるテーブル間の和

    テーブルAの属性item1とテーブルBのitem1の和を求めるにはSQLでどのように記述すれば良いのでしょうか?? tableA ------ id item1 item2 pointer tableB ------ id item1 item2 pointer という2つのテーブルで,tableBのpointerはtableAのidを指しています.

  • 演算子の件です。

    演算子の件です。 例えば、 a.field と b.fieldが等しいデータと抽出 SELECT * FROM tablea AS a, tableb AS b WHERE a.field = b.field はOKなのですが、 a.field に b.fieldが含まれるデータと抽出 SELECT * FROM tablea AS a, tableb AS b WHERE a.field like %b.field% は駄目でした。 値であれば %atai% でOKだと思うんですが、フィールドを指定した値で 任意文字等を指定することは可能なのでしょうか?

    • ベストアンサー
    • MySQL
  • Joinしてカウントしたいのですが,,,

    どうにもSQLになじめず困っている初心者です。宜しくお願い致します。 tableAとtableBがあり,それぞれ6つの列があります。両方とも,英語の人名を入力したものです。 tableAは添付した画像のようになっていて, A_ID, A_Key, A_firstname1, A_firstname2, A_lastname1, A_lastname2 と6つの列があります。要は英語の人名のデータなのですが,別名や綴り違いがあるためにfirst nameもlast nameも2列ずつあります。tableAは,これが数百行あります。 tableBも同様に, B_ID, B_Key, B_firstname1, B_firstname2, B_lastname1, B_lastname2 と6つ列があります。ただしこちらは数万行あります。 やろうとしていることは,名前の綴り違いなどを考慮して,tableBの中にtableAの人名が何回出てくるか数えて,その数字をA_IDと一緒に表示するViewを作る,というものです。 そこで,以下のようなクエリを書きました。DBMSはMySQL 5.2を使っています。 Create View NewView as select tableA.A_ID, count(*) as Num from tableA join tableB on (tableA.A_firstname1 in (tableB.B_firstname1, tableB.B_firstname2)) and (tableA.A_lastname1 in (tableB.B_lastname1, tableB.B_lastname2)) group by tableA.A_ID ところが,出力されたViewはどうも思っていたものとは違い,名前が一致していないものもカウントされてしまいます。どこが間違っているのでしょうか。 お詳しい方のお知恵を拝借できたらと思います。どうか宜しくお願い致します。

  • 別テーブルの値をsetしてupdateしたい

    テーブルAとテーブルBで、idが一致したデータのみ、 テーブルAのフィールドにテーブルBの値を入れたいです。 tera termを使用して、 UPDATE tableA as a, tableB as b SET a.value = b.value WHERE a.id = b.id 上記のupdate文を流すと一行目の[as a]からsyntaxエラーが出ます。 ERROR 1064: You have an error in your SQL syntax near 'as a, tableB as b SET ~' at line 1 書き方が悪いのでしょうか? どのように記述すればb.valueをa.valueにsetできますか?

    • ベストアンサー
    • MySQL
  • 2つのテーブルを結合する際にIDを割り当てたい

    PHPでmySQLを作成しています。 現在学習中なのですが、自己解決できない問題が発生したのでどうかお知恵をお貸しください。 --- 同じデータベースにTableAとTableBがあります。 中身は下記のようだとします。 TableA      |  TableB id  name time | name time :   :   :  |  C1   D2 101 A1  B1  |  C2   D2    102 A2  B2  |   :    : 103 A3  B3  |  C20  C20 --- テーブルAのカラムid、name、timeの3カラム、テーブルBはname、timeの2カラムです。 これを --- TableA        TableB id  name time  name time :   :   : 101 A1  B1 102 A2  B2 103 A3  B3 104 C1  D1 105 C2  D2 :   :   : 123 C20  D20 --- とするような方法を教えてください。(TableBはレコードなし) テーブルの結合ではIDが割り当てられず、上手な方法が思いつきません。 どうかご教示のほど、よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • SQLを教えてください

    単純そうなのですがSQLが分かりません。 次のような2つのテーブルがあるとします。 TableA ( a VARCHAR2(2) b VARCHAR2(30) ) TableB ( x VARCHAR2(2) y VARCHAR2(30) z1 VARCHAR2(2) z2 VARCHAR2(2) z3 VARCHAR2(2) z4 VARCHAR2(2) z5 VARCHAR2(2) ) この時にTableBはTableAのグループみたいなものでz1からz5までがTableAのaが登録されています(NULLの場合もあります)。ここでTableBの内容を表示するときに x, y, b1, b2, b3, b4, b5 と出力したいのです。 すみませんがよろしくお願いします。

  • SQL 複数テーブルのupdate

    こんばんは。 複数テーブルの複数カラムをupdateしたいのですが、 うまくいかず困っています。 どなたか助けてください>_< テーブルA(tableA)のoptionAというカラムと、 テーブルB(tableB)のoptionBというカラムを両方更新したいんです。 やりたい内容のイメージとしてはこんな感じです↓ update tableA a, tableB b set a.optionA='OK', b.optionB='OK' where a.student_id=b.student_id and a.name='山田'; どなたかご指導お願いいたします。

  • このSQL文を教えてください。

    Windows2000(SP3) SQLServer2000(SP3) で開発しています。 テーブルA 項目No,大分類コード,中分類コード,詳細コード,日付,内容 テーブルB 大分類コード,中分類コード,詳細コード,新_詳細コード,内容 TableA,Bでは大分類コード,中分類コード,詳細コードがリンクする このような状況で、TableA,Bを下記のようにjoinして、  TableA.大分類コード,   TableA.中分類コード,  TableB.新_詳細コード, が重複するデータを取得する場合のSQL文を教えてください。 (join) SELECT  TableA.*,  TableB.* FROM  TableA LEFT OUTER JOIN  TableB ON  TableA.大分類コード=TableB.大分類コード  AND  TableA.中分類コード=TableB.中分類コード  AND  TableA.詳細コード=TableB.詳細コード よろしくお願いします。

専門家に質問してみよう