こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

PHP+MySQL 内部結合(INNER_JOIN)がうまく行きません。

以下の文で「client_master」テーブルと「jobmaster0717」テーブルを内部結合させようとしているのですが、うまく行きません。どこがおかしいのでしょうか?
<?php

 // データベースサーバへの接続・データベースの選択
 $db = mysql_connect('localhost','test','password');
 $db_name = 'test';
 mysql_select_db($db_name,$db);

 // 処理対象テーブル
 $tbl_name1 = "client_master";
 $tbl_name2 = "jobmaster0717";
 
 // 内部結合(INNER JOIN句)
 $str_sql1 = "SELECT * FROM {$tbl_name1}"
      . " INNER JOIN {$tbl_name2}"
      . " ON {$tbl_name1}.company_ID"
      . "  = {$tbl_name2}.client_ID;";
 $rs1 = mysql_query($str_sql1,$db);
 print "\"{$str_sql1}\"<br>\n";

 // 結果セットの表示
 show_rs($rs1,$db);
 print "<br>\n";

 // 結果セット(結果ID)の開放
 mysql_free_result($rs1);
 

 // データベースサーバの切断
 mysql_close($db);

?>

投稿日時 - 2007-07-26 15:51:57

QNo.3201368

暇なときに回答ください

このQ&Aは役に立ちましたか?

5人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

以下5点気をつけるとかなり精度があがるとおもいます。
1)SQL文はヒアドキュメントをつかって書く
2)テーブル名やフィールド名はバッククォートでくくる。
3)SQLのケツに終端子「;」や「\G」はつけない。
4)デバッグのときにはdieでエラーを拾ってやる
5)そもそもSELECTの際にフィールド無指定「*」は使わない

例)
$sql =<<<eof
SELECT *
FROM `{$tbl_name1}`
INNER JOIN `{$tbl_name2}`
ON `{$tbl_name1}`.`company_ID`=`{$tbl_name2}`.`client_ID`

eof;
$rs1 = mysql_query($sql,$db) or die(sql.";<br>".mysql_error()");

投稿日時 - 2007-07-26 17:55:24

ANo.3

>ONの後に()が無いみたいですけど
>関係ないですか?

条件式を不要な()でくくる人がいますが、SQLだけのことを言うなら、今回のように単一の条件式の場合、()は不要です。

投稿日時 - 2007-07-26 17:14:17

ANo.2

<?php

 // データベースサーバへの接続・データベースの選択
 $db = mysql_connect('localhost','test','password');
 $db_name = 'test';
 mysql_select_db($db_name,$db);

 // 処理対象テーブル
 $tbl_name1 = "client_master";
 $tbl_name2 = "jobmaster0717";
 
 // 内部結合(INNER JOIN句)
 $str_sql1 = "SELECT * FROM {$tbl_name1}"
      . " INNER JOIN {$tbl_name2}"
      . " ON ({$tbl_name1}.company_ID"
      . "  = {$tbl_name2}.client_ID);";
 $rs1 = mysql_query($str_sql1,$db);
 print "\"{$str_sql1}\"<br>\n";

 // 結果セットの表示
 show_rs($rs1,$db);
 print "<br>\n";

 // 結果セット(結果ID)の開放
 mysql_free_result($rs1);
 

 // データベースサーバの切断
 mysql_close($db);

?>

これで動きませんか、
またPHPのエラーはなんとでているでしょうか?

投稿日時 - 2007-07-26 16:58:54

ANo.1

PHPはよくわからないのであれですが、
SQL単体では動くのでしょうか?コマンドラインなどから

SELECT * FROM
client_master
INNER JOIN
jobmaster0717 ON
(client_master.company_ID = jobmaster0717.client_ID)

ONの後に()が無いみたいですけど
関係ないですか?

投稿日時 - 2007-07-26 16:03:02

補足

samdecoさん、ありがとうございます。
『phpMyAdmin』で試したところ、動きました。

私は、すべて素人で参考書みながら、やっているのですが
SQL単体で動くけど、PHPで動かないというのをいくつか抱えていて
困っております。

投稿日時 - 2007-07-26 16:43:48

あなたにオススメの質問