- 締切済み
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); ?>
- sergero
- お礼率0% (0/5)
- MySQL
- 回答数4
- ありがとう数5
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- yambejp
- ベストアンサー率51% (3827/7415)
以下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()");
- chukenkenkou
- ベストアンサー率43% (833/1926)
>ONの後に()が無いみたいですけど >関係ないですか? 条件式を不要な()でくくる人がいますが、SQLだけのことを言うなら、今回のように単一の条件式の場合、()は不要です。
- samdeco
- ベストアンサー率30% (6/20)
<?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のエラーはなんとでているでしょうか?
- samdeco
- ベストアンサー率30% (6/20)
PHPはよくわからないのであれですが、 SQL単体では動くのでしょうか?コマンドラインなどから SELECT * FROM client_master INNER JOIN jobmaster0717 ON (client_master.company_ID = jobmaster0717.client_ID) ONの後に()が無いみたいですけど 関係ないですか?
関連するQ&A
- inner joinについて
SQLのデータ抽出方法についてお教え下さい。 TABLE_2をdistinctで重複を無くして、TABLE_1とinner joinさせたいです。 select distinct TABLE_2.id と select TABLE_1.ID from TABLE_1 inner join distinct TABLE_2.ID といったようなことをやりたいです。 TABLE_1 ID 001 001 002 002 002 TABLE_2 ID 001 001 002 002 002 環境はMYSQL5.5になります。よろしくお願いいたします。
- ベストアンサー
- その他(データベース)
- mySQLの内部結合について
現在mySQLを使って、SQL文の勉強をしているのですがわからないことがあり、質問させていただきました。 テーブル同士をINNER JOINして結果を取得して、これに対してさらに別の処理(Whereなど)を行いたいのですが、うまくやり方がわかりません。 具体的にSQL文でいうとこんな感じです(ただしエラーが出て動きません)。 SELECT cmaster.comic_id,tags,title FROM mysql.comic_tag as ctag INNER JOIN mysql.comicmaster as cmaster ON ctag.comic_id = cmaster.comic_id AND WHERE tags = 'aa' この処理でやりたいことを説明するとcomic_tagとcomicmasterを結合して、その結果に対してさらにWhereでデータを絞るということしています。 このような場合はどのように処理をしたらいいんでしょうか?またjoinした後のデータを、既存のテーブルのように扱いたいのですが、なにか方法はないのでしょうか?
- ベストアンサー
- MySQL
- MAX関数を使ってからLEFT JOINしたいのですが・・
毎度お世話になります。 下記2つのテーブルからテーブル結合をして表示させたいのですが、その前にサブテーブルにある時間データの中で最新のものだけと結合したいと考えています。色々試したのですがうまくいきません。どなたかご教授の程よろしくお願いいたします。 main_tbl | id | basyo | name | --------------------- | 1 | 1 | aa | | 2 | 1 | bb | | 3 | 2 | cc | | 4 | 3 | dd | sub_tbl | id | jyotai | time | ------------------------ | 1 | 1 |12:25:30| | 1 | 2 |13:15:12| | 2 | 1 |13:20:14| | 1 | 3 |13:50:08| 欲しい結果 | id | basyo | name | jyotai | time | --------------------------------------- | 1 | 1 | aa | 3 |13:50:08| | 2 | 1 | bb | 1 |13:15:12| | 3 | 2 | cc | null | null | | 4 | 3 | dd | null | null | 考えた構文 $sql = "SELECT main_tbl.id, main_tbl.basyo, main_tbl.name, sub_tbl.jyotai, sub_tbl.time FROM main_tbl LEFT OUTER JOIN (SELECT MAX(time) FROM sub_tbl GROUP BY id) ON main_tbl.id = sub_tbl.id"; または $sql = "SELECT main_tbl.id, main_tbl.basyo, main_tbl.name, sub_tbl.jyotai, sub_tbl.time FROM main_tbl LEFT OUTER JOIN sub_tbl on main_tbl.id = sub_tbl.id WHERE SELECT MAX(time) FROM sub_tbl GROUP BY id"; または $sql1 = "SELECT MAX(time) FROM sub_tbl GROUP BY id"; $rs1 = mysql_db_query($db,$sql1) or die("sql Error!"); $sql = "SELECT main_tbl.id, main_tbl.basyo,main_tbl.name, $rs1.jyotai, $rs1.time FROM main_tbl LEFT OUTER JOIN $rs1 ON main_tbl.id = $rs1.id"; ~以下クエリの実行と表示文~ どれも駄目でした。(クエリエラー表示) 因みに結合のみとMAX関数を別々に実行すると表示できることを確認しています。 環境は WinXP Mysql5.0.41 php5.2.3 です。 まだまだ勉強中ですのでよろしくお願いいたします。
- ベストアンサー
- PHP
- inner joinでサブクエリ
SQLについてお教え頂けませんでしょうか? 在庫テーブル ・ID ・数量 データ 001,1 001,3 002,3 002,2 002,4 003,2 商品テーブル ・ID データ 001 002 003 004 やりたいこと: 在庫テーブルには重複しているIDがあります。 商品テーブルには重複しているIDはありません。 在庫テーブルの重複を削除したIDと商品テーブルのIDをinner joinで結びたいと思います。 ・select distinct ID FROM 在庫テーブル ・select ID FROM 商品テーブル この2つのjoin方法がわかりません。 結果として、 001 002 003 を取得したいいです。宜しくお願いします。 ちなみに select ID from 商品テーブル inner join 在庫テーブル 商品テーブル.ID = exists(select distinct ID from 在庫テーブル) というコードを書きましたが、動きませんでした・・・抽出データが0件でした・・・
- ベストアンサー
- その他(データベース)
- Inner Joinについて
SQLについてお教え頂けませんでしょうか? 在庫テーブル ・ID(プライマリーキー) ・数量 データ 001,1 002,2 追加テーブル ・ID(プライマリーキーではない) ・数量 データ 001,3 001,4 002,1 002,2 上記のようなデータがあります。 Updateクエリを実行したときに、追加テーブルにある数量を、在庫テーブルにある数量に足しこみたいです。 欲しい結果は、在庫テーブルのデータが 001,8 002,5 となっていてもらいたいです。 Update 在庫テーブル Inner Join 追加テーブル On 在庫テーブル.ID = 追加テーブル.ID Set 在庫テーブル.数量 = 在庫テーブル.数量 + 追加テーブル.数量 上記のようなSQLを教えてもらったので実行したら問題なくできました。 ただし、どのようなプロセスで結果が得られたのかわかりません。 どうぞ、ご教授お願いいたします。
- ベストアンサー
- その他(データベース)
- inner joinをすると数がおかしくなります
SQLのinner joinについてお教え下さい。環境はWin 7 MYQL5です。 t1テーブルのデータ ID,在庫 001,22 t2テーブルのデータ ID,出庫 001,17 001,3 SELECT Sum(t1.stock) AS `在庫` FROM t1 where id = '001' 上記SQLの結果は22と表示されます。 SELECT Sum(t1.stock) AS `在庫` FROM t1 INNER JOIN t2 on t1.id = t2.id where id = '001' とやると、結果が44になってしまいます。 なぜそんな結果になってしまうのでしょうか? 結果はt1.stockは在庫22なので、22と表示するようにしたいです。 よろしくお願いいたします。
- ベストアンサー
- MySQL
- mySQLでINSERT Errorとなります。
初心者です。よろしくお願いいたします。 データを入れたいのですが、エラーとなってしまいます。 以下でデータベースとテーブルを作成し、 <?php $db_name="tori"; $tbl_name = "hato"; $db = mysql_connect('localhost', 'root', ''); if (!$db) { die('接続できません: ' . mysql_error()); } $sql = 'CREATE DATABASE tori'; if (mysql_query($sql, $db)) { echo "データベースtori の作成に成功しました\n"; } else { echo 'データベースtoriの作成に失敗しました: ' . mysql_error() . "\n";} mysql_select_db($db_name,$db) or die("データベースへの接続エラー"); $query ="create table {$tbl_name} ( id char(8) primary key, date TEXT, sex TEXT, age TEXT )TYPE=MyISAM"; mysql_query($query); $query ="INSERT INTO `houzingpark`.`hatogaya` ( id , date , sex , iro ) VALUES ( '2', 'uu', 'ii', 'po' )"; mysql_close($db); ?> 以下で入れ込みたいのですが、出来ないのです。 <?php $db_name="tori"; $tbl_name = "hato"; $db = mysql_connect('localhost', 'root', ''); if (!$db) { die('接続できません: ' . mysql_error()); } mysql_select_db($db_name,$db) or die("データベースへの接続エラー"); $sql="INSERT INTO hatogaya ( id , date , sex , iro ) VALUES ( 3, 2005-12-3, mesu, cya )"; mysql_query($sql); if(!$result){print 'INSERT Error!';} echo $sql; mysql_close($db); ?> でINSERTしようとするのですが、INSERT Error!と表示されてしまいます。 Adminで見るとデータベースとテーブルは出来ているのですが、どうしてもINSERTできないのです。 もう何時間も悪戦苦闘しております。 どなたかご指導よろしくお願いいたします。
- 締切済み
- MySQL
- mysql_select_db()関数に関して・・・。MySQLでテーブルの作成ができません。
こんにちは、さくらインターネットのレンタルサーバでMySQLとphpを連動させたサイトを作っているのですが、初歩的なことでつまずいてしまい困っています。 まず、フォームで入力させたデータをPOSTで受け取り、その受け取ったデータをテーブル名として、データベース上にテーブルをつくりたいのですが、エラー文が表示されるだけでできません。 データベース自体への接続はできているようなのですが、phpMyAdminで見ても全くできていません。SQL文をphpMyAdminで実行するときちんと正常にテーブルができますので、そもそもデータベースが使用できないとか、もしくはSQL文の間違いでもなさそうです。 $t1 = $_POST['test1']; $t2 = $_POST['test2']; echo"{$t1}を受け取りました<br>"; $link = mysql_connect('mysql**.db.sakura.ne.jp', 'ユーザー名', 'パスワード'); if (!$link) { die('接続失敗です。'.mysql_error()); } print('接続に成功しました。<br>'); //1.さくらインターネット内にあるデータベースの選択 $db_name = "自分のデータベース名"; $selectDB = mysql_select_db($db_name,$link) or die("接続できません。"); //2.データベース内にテーブルを作成。 echo"{$t1}がテーブル名になります。<br>"; //3.テーブル作成用SQL文 $str_sql = "CREATE TABLE {$t1}" . "(" . "{$t2} INT(7) NOT NULL," . ");"; //4.上のSQL文を実行してテーブルを作る。 mysql_query($str_sql,$selectDB); echo"データベース内にテーブル「{$t1}」を作成しました。<br>"; //データベースへの接続を切断 $close_flag = mysql_close($link); if ($close_flag){ print('切断しました。<br>'); } 実行結果:Warning: mysql_query(): supplied argument is not a valid MySQL-Link resourceとなってテーブルは作成されず。 自分でも調べて見たところ、mysql_connect()での接続はちゃんとできているようなのですが、その次のmysql_select_db()関数がうまく働いていないようです。 つまりデータベースの選択ができていないので当然エラーとなるようです。 もう何日も悩んでいます。わかる方がいましたらどうぞよろしくお願いします。
- ベストアンサー
- PHP
- 複数のデータベースを使う場合
php4 + MYSQL4.0.2で作業しています。 1つのサーバーにある、複数のデータベースに接続する方法を教えてください。 DB1:テーブルhoge(ID、name) DB2:テーブルhogehoge(ID, hogeID, comment) このような場合、データベースが全てDB1に入っているとすれば、 $con = mysql_connect(host, user, pass); sql="SELECT name, comment" . " FROM hogehoge INNER JOIN hoge ON hogehoge.hogeID = hoge.ID"; $rst = mysql_db_query(DB1, $sql, $con); $col = mysql_fetch_array($rst); print($col['name'] . $col['comment']); となりますが、 テーブルhogeとhogehogeが、異なるデータベースに存在する場合はどのようにすればよいのでしょうか? 以上、よろしくお願いいたします。
- ベストアンサー
- MySQL
- inner joinとwhereでの結合の違いは?
お世話になります。 たとえば、テーブルが複数(この場合2つ)ある場合。 (1) test(カラム:table_id,table_name) (2) tester(カラム:table_id,table_name) 以下のクエリは条件的に select a.table_id, a.table_name from test a inner join tester b on a.table_id = b.table_id ************* select a.table_id, a.table_name from test a , tester b where a.table_id = b.table_id 同じですよね? パフォーマンス的にもjoinすることのメリットが判りません。
- 締切済み
- その他(データベース)
補足
samdecoさん、ありがとうございます。 『phpMyAdmin』で試したところ、動きました。 私は、すべて素人で参考書みながら、やっているのですが SQL単体で動くけど、PHPで動かないというのをいくつか抱えていて 困っております。