2つのテーブルからデータを取り出す方法

このQ&Aのポイント
  • MySQLを使用して2つのテーブルからデータを取り出す方法を教えてください。
  • テーブル名『aman』から『kakaku』と『sonota』、テーブル名『bman』から『title』を取得したいです。
  • SQL文の作成方法について教えてください。
回答を見る
  • ベストアンサー

2つのテーブルからデータを取り出す mysql

Mysql  2つのテーブルからデータを取りたいです。 テーブル名 aman id : amemberid : bookid : kakaku : sonota : day テーブル名 bman id : bmemberid : bookid :title : day この二つのテーブル amanからkakaku,sonota。bmanからtitleを取り出したいのですが どのようなSQLになるのでしょうか。 bookidは2つのテーブルに同じ数字番号が入るようになっています。 ソース $sql='SELECT * FROM aman WHERE bookid=? JOIN message2 ON aman.bookrid=bman.bookrid'; $stmt=$dbh->prepare($sql); $data[]=$carid; これではだめでした。

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

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

  • ベストアンサー
  • maiko0333
  • ベストアンサー率19% (840/4403)
回答No.1

select kakaku, sonota, aman.title from aman bman where aman.bookid=bman.bookid bookidはどちらにもある番号しか選んでいません。 amanのみ、bmanのみを加えるには上記とbmanにないamanとamanにないbmanを unionで結合する必要があります。

a7a7a77a7a74
質問者

お礼

ありがとうございました!

その他の回答 (1)

  • webuser
  • ベストアンサー率33% (372/1120)
回答No.2

書く順番が出鱈目ですね。 'SELECT * FROM aman WHERE bookid=? JOIN message2 ON aman.bookrid=bman.bookrid' WHERE句は全体に対する条件なので一番後ろです。 ON句は結合条件なので、from JOINの後ろです。 順番的には↓ SELECT * FROM aman JOIN message2 ON aman.bookrid=bman.bookrid WHERE bookid=?

a7a7a77a7a74
質問者

お礼

勉強になりました ありがとうございました

関連するQ&A

  • Mysql php 格納できない

    mysqlのデータにデータを格納したいのですができません。 エラー文も出ません。 phpのpostで受け渡しデータベースに格納する流れです。 データの受け渡しは確認済み。 下記はソースです。  こちらも var_dump($data)で確認済み すべてにしっかりデータは入っています。 $sql='INSERT INTO zyoho(memberid,city.town,brand,syasyu,syasyumei,nenshiki,kyori, zyotai,sonota,gazou1,gazou2,gazou3,gazou4,gazou5,day)VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)'; $stmt=$dbh->prepare($sql); $data[]=$memberid; $data[]=$city; $data[]=$town; $data[]=$brand; $data[]=$syasyu; $data[]=$syasyumei; $data[]=$nenshiki; $data[]=$kyori; $data[]=$zyotai; $data[]=$sonota; $data[]=$gazou1; $data[]=$gazou2; $data[]=$gazou3; $data[]=$gazou4; $data[]=$gazou5; $data[]=date('Y-m-d H:i:s'); $stmt->execute($data); mysql テーブル名 zyoho id int primary key auto_increment memberid int city varchar(20) town varchar(20) brand varchar(50) syasyu varchar(50) syasyumei varchar(100) nenshiki varchar(20) kyori varchar(20) zyotai text sonota text gazou1 varchar(50)   gazou2 varchar(50) gazou3 varchar(50) gazou4 varchar(50),gazou5 varchar(50) day datetime 解決方法ご教授いただければと思います。

    • ベストアンサー
    • MySQL
  • レコード削除・sqlインジェクション対策

    このようなSQL文は危険でしょうか? $sql = "delete テーブル名 where id = :id"; $stmt = $dbh->prepare($sql); $stmt->execute(array(":id" => $_POST['id'])); 上記の例だと、$_POST['id']は、 ちゃんとエスケープできているのでしょうか?

    • ベストアンサー
    • MySQL
  • mysqlのデータをPDOでDELETEできない

    PDOオブジェクト(PHP)を使用したmysqlのデータ削除について、質問させてください。 PDOオブジェクトを使用して、mysqlのデータ読み込み・削除を行っています。 特定のデータを読み込み、処理を行わせた後、対象のデータの削除をしたいのですが 読み込みは出来るのに、削除で失敗してしまいます。 処理を行わせるSQLをvar_dumpで出力させ、 それを直接phpMyAdminでSQL実行してみたのですが、 問題なく削除が行われています。 SQLの問題ではなく、PHP側の問題だと思うのですが、 解決方法が見つかっておりません。 知恵を貸していただけないでしょうか。 $post_data = explode('¥t', $_POST['data_array']); $user_id = $post_data[0]; $account_name = $post_data[1]; $data_id = $post_data[2]; $gunre_id = $post_data[3]; try { // DB接続 $dbh = new PDO($serverInfo["SERVER"], $serverInfo["USER"], $serverInfo["PASS"]); $dbh -> query('SET NAMES utf8'); // 処理させる対象アカウント情報を取得 $sql_account; $sql_account = 'SELECT * FROM '. $serverInfo['TBL_ACCOUNT']. ' WHERE GUNRE_ID = :gunre'; } $stmt_account = $dbh -> prepare($sql_account); $stmt_account -> bindParam(':gunre', $gunre_id, PDO::PARAM_STR); $stmt_account -> execute(); while($account = $stmt_account -> fetch(PDO::FETCH_ASSOC)) { // 取得してきたデータを使用して処理 // この処理は正常に行われているので、SELECTは正常に行われていると考えられます } // 処理が完了したら、データを削除 // ↓ここで組み立てたSQLを出力し、phpMyAdminでSQL実行すると、データは削除されました $sql_delete = 'DELETE FROM '. $serverInfo['TBL_DATA']. ' WHERE USER_ID = "'. $user_id. '" AND ACCOUNT_NAME = "'. $account_name. '" AND DATA_ID = "'. $data_id. '"'; $stmt_delete = $dbh -> prepare($sql_delete); // ↓元々はbindParamで指定していたのですが、処理が出来なかったので // $SQL_deleteの中に値を埋め込み、処理を行わせました。結局出来なかったのですが・・・ // $stmt_delete -> bindParam(':id', $user_id, PDO::PARAM_STR); // $stmt_delete -> bindParam(':account', $account_name, PDO::PARAM_STR); // $stmt_delete -> bindParam(':data', $data_id, PDO::PARAM_STR); $result = $stmt_delete -> execute(); var_dump($result); // ←出力結果は「false」です } catch (Exception $ex) { echo '<font color="red">システムエラーが発生しました</font><br />'; exit(); } 以上、よろしくお願いします。

    • ベストアンサー
    • PHP
  • 【PHP+MySQL 】レコード追加できない

    配列に入っているタブ区切りのデータを MySQLのテーブルに入れたいと思い 下記のようにコーディングしたのですが (因みにDB接続はちゃんと確立されております) ------------------------------------------ $arrData[0] = "1001 ^ あ"; $arrData[1] = "1002 ^ い";     ・     ・     ・ $sql = 'insert into table_a values (?,?)'; $stmt = $dbh->prepare($sql); for($i=0;$i<=count($arrData);$i++){ $tmp = split("\t",$arrData[$i]); $flag = $stmt->execute(array($tmp[0],$tmp[1])); if (!$flag){ die('データの追加に失敗しました'); } } ------------------------------------------ データの追加に失敗しましたが表示されうまくできません。 ■ どのように直せばよいかご教示願います。 ■ また、mysql関数にはPDO関数のprepare→executeのような 書き方は無いのでしょうか。 ご存知の方いらっしゃいましたら教えて下さい。 よろしくお願い致します。

    • 締切済み
    • PHP
  • MySQLのテーブル名を変数に置いた場合

    お世話になります。 jQueryのプラグインを使用してDBから吐き出したデータを並べ替えをして、 UPDATEをさせているのですが、UPDATE先のテーブル名を変数に置いた場合、 例えば、 $id_set = "1"; if (isset($_POST['result'])) { $sql = "UPDATE `{$id_set}` SET no = ? WHERE id = ?"; $stmt = $conn->prepare($sql); foreach (explode(',', $_POST['result']) as $i => $id) { $stmt->execute(array(++$i, $id)); } //foreachの終了 } //if (isset($_POST['result'])) の終了 $sql1 = "SELECT id, name, price, no FROM `{$id_set}` ORDER BY no"; $stmt = $conn->prepare($sql1); $stmt->execute(); foreach ($stmt as $row) { $state[] = array("id"=>$row['id'], "name"=>$row['name'], "price"=>$row['price'], "no"=>$row['no']); $this->smarty_obj->assign("state_loop",$state); } //foreachの終了 とすれば、「 1 」というテーブルのデータをSELECTしてUPDATEと正常に走るのですが、 $id_set = $_POST["id"]; 等としてpostした場合、UPDATEの際に「 Call to a member function execute 」のエラーが 吐かれます。該当のテーブルが存在しないと認識されているのだと思いますが、 ページ遷移してくる際に持ってきたデータを活用してテーブル名にセットして、 尚且つ正常にUPDATEさせるにはどの様な構文にすれば良いのでしょうか? ご教示の程、どうぞよろしくお願い申し上げます。 ---------------- ▼スペック PHP 5.3.3 MySQL 5.0.95 ----------------

    • ベストアンサー
    • PHP
  • sql エラー

    エラーが出ます。どこかおかしな点はありますでしょうか。 エラー文 Call to a member function prepare() on a non-object ソース $page = 1; $limit = 2; $offset = $limit * ($page - 1); $sql='SELECT COUNT(*) FROM message WHERE memberid=? GROUP BY aid'; $stmt=$dbh->prepare($sql); $data[]=$memberid; var_dump($data); $stmt->execute($data); $dbh=null; $total=$stmt->fetchColumn(); $lastpage= ceil($total/$limit); $sql='SELECT aid,max(kaisyamei),max(day) FROM message WHERE memberid=? GROUP BY aid LIMIT '.$limit.' OFFSET '.$offset; $stmt=$dbh->prepare($sql); $stmt->execute($data); $dbh=null; ご教授お願いいたします。

    • ベストアンサー
    • MySQL
  • MySQLのトランザクションについて

    初めて質問します。 今、PerlのDBIを使ってMySQLのトランザクション処理にチャレンジしています。 ところが、rollback処理がうまくできません。 具体的には、 table2 がある状態で下のプログラムを動かすと、 エラーの表示が出るのに、 table1 は作成されました。 何らかのエラーがあれば、どちらも作成されないようにしたいです。 ======================================================= my %sql; $sql{db_name} = "database"; $sql{host} = "localhost"; $sql{user_name} = "user_name"; $sql{password} = "password"; use DBI; my $dbh = DBI->connect('DBI:mysql:'.$sql{db_name}.':'.$sql{host}, $sql{user_name}, $sql{password} ,{RaiseError => 1, PrintError => 0, AutoCommit => 0 }) || &Err(); my $sth; my $re; eval { my $sql_string1 = "create table table1(`id` int);"; my $sql_string2 = "create table table2(`id` int);"; $sth = $dbh->prepare($sql_string1); $re = $sth->execute; $sth = $dbh->prepare($sql_string2); $re = $sth->execute; }; if ($@) { $tag="Err:".$@."\n"; $sth = $dbh->rollback; }else{ $sth = $dbh->commit; } $sth->finish; $dbh->disconnect; ======================================================= 検索して、いろいろいじっても解決しませんでした。 どうかよろしくお願いします。

    • ベストアンサー
    • Perl
  • $dbh = dbConnect();

    いつもお世話になりありがとうございます。 標記の件。 エラーになります。 どう直せばいいでしょうか? エラーメッセージは Fatal error: Uncaught Error: Call to undefined function dbConnect() in C:\xampp\htdocs\blog_create.php:9 Stack trace: #0 {main} thrown in C:\xampp\htdocs\blog_create.php on line 9 です。 コーディングは下記です。 <?php //require_once('form.html'); require_once('blog.php'); $sql = "INSERT INTO table_name(name,title,category,content) VALUES (:name, :title, :category, :content,)"; $dbh = dbConnect(); $dbh->beginTransaction(); try { $stmt = $dbh->prepare($sql); $stmt->bindValue(':id', $blogs['id'], PDO::PARAM_INT); $stmt->bindValue(':name', $blogs['name'], PDO::PARAM_STR); $stmt->bindValue(':title', $blogs['title'], PDO::PARAM_STR); $stmt->bindValue(':category', $blogs['category'], PDO::PARAM_STR); $stmt->bindValue(':content', $blogs['content'], PDO::PARAM_STR); $stmt->bindValue(':post_at', $blogs['post_at'], PDO::PARAM_INT); $stmt->execute(); $stmt->commit(); echo 'ブログを投稿しました!'; } catch (PDOException $e) { $dbh->rollBack(); exit($e); } blog.php <?php //require_once('dbc.php'); //<?php //class Dbc //{ // protected $table_name; //protected function dbConnect() //{ $dsn = 'mysql:host=localhost;dbname=blog_app;charset=utf8'; $user = 'blog_user'; $pass = 'rhythm0!KT'; try { $dbh = new \PDO($dsn, $user, $pass, [ \PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION, ]); } catch (PDOException $e) { echo '接続失敗' . $e->getMessage(); exit(); }; return $dbh; //} function getAll() { $dbh = $this->dbConnect(); //①SQLの準備 $sql = "SELECT * FROM $this->table_name"; //②SQLの実行 $stmt = $dbh->query($sql); //③SQLの結果を受け取る $result = $stmt->fetchall(\PDO::FETCH_ASSOC); return $result; $dbh = null; } $dbh = $this->dbConnect(); $sql = "SELECT * FROM $this->table_name"; $stmt = $dbh->prepare("SELECT * FROM $this->table_name Where id = :id"); $stmt->bindValue(':id', (int)$id, \PDO::PARAM_INT); $stmt->execute(); $result = $stmt->fetch(\PDO::FETCH_ASSOC); if (!$result) { exit('本文がありません。'); } return $result; //} //function blogCreate($blogs) { $sql = 'INSERT INTO blog(title, content, category, publish_status) VALUES (:title, :content, :category, :publish_status)'; $dbh = $this->dbConnect(); $dbh->biginTransaction; try { $stmt = $dbh->prepare($sql); $stmt->bindValue(':title', $blogs['title'], \PDO::PARAM_STR); $stmt->bindValue(':content', $blogs['content'], \PDO::PARAM_STR); $stmt->bindValue(':category', $blogs['category'], \PDO::PARAM_INT); $stmt->bindValue(':publish_status', $blogs['publish_status'], \PDO::PARAM_INT); $stmt->execute(); $dbh->commit(); echo 'ブログを投稿しました!'; } catch (PDOException $e) { $dbh->rollBack(); exit($e); } } function delete($id) { if (empty($id)) { exit('idが不正です。'); } $dbh = $this->dbConnect(); $stmt = $dbh->prepare("DELETE FROM $this->table_name Where id = :id"); $stmt->bindValue(':id', (int)$id, \PDO::PARAM_INT); $stmt->execute(); echo 'ブログを削除しました!'; return $result; } //} ?> 度々申し訳ございません。 教えてください。 ご回答のほど宜しくお願い申し上げます。

    • ベストアンサー
    • PHP
  • SQL文の処理を関数化したいです

    SQL文をユーザー定義関数でまとめたいのですが、うまくいきません。 以下の処理を全てfunction search() { }の中に入れるのは間違っていますか? 関数名はsearchとしました。 try { $sql = 'SELECT product.id, name, price, img, status, stock FROM product JOIN item_stock ON product.id = item_stock.stock_id WHERE status = 1'; $stmt = $dbh->prepare($sql); $stmt->execute(); $result = $stmt->fetchALL(); $err_msg[] = ($keyword . 'を含む商品は見つかりませんでした。'); } catch (PDOException $e) { $err_msg[] = '商品を取得できませんでした。'; }

    • ベストアンサー
    • PHP
  • ステートメントが必要です。???

    いつも大変お世話になり誠にありがとうございます。 標記の件。 下記のコードの一番下の}にステートメントが必要です と出ます。 どういう意味でしょうか? どうか教えてください。 宜しくお願い申し上げます。      記 function blogUpdate($blogs) { $sql = "UPDATE $this->table_name SET title = :title, content = :content, category = :category, publish_status = :publish_status Where id = :id"; $dbh = $this->dbConnect(); $dbh->biginTransaction(); try { $stmt = $dbh->prepare($sql); $stmt->bindValue(':title', $blogs['title'], PDO::PARAM_STR); $stmt->bindValue(':content', $blogs['content'], PDO::PARAM_STR); $stmt->bindValue(':category', $blogs['category'], PDO::PARAM_INT); $stmt->bindValue(':publish_status', $blogs['publish_status'], PDO::PARAM_INT); $stmt->bindValue(':id', $blogs['id'], PDO::PARAM_INT); $stmt->execute(); $stmt->commit(); echo 'ブログを更新しました!'; } catch (PDOException $e) { $dbh->rollBack(); exit($e); } }

    • ベストアンサー
    • PHP