SQL文でのサブクエリの質問

このQ&Aのポイント
  • SQL文でのサブクエリの使い方について質問があります。具体的には、MySQLでのサブクエリを使用して複数条件の絞込み検索を行いたいと思っていますが、うまく表示されません。どのようなSQL文を使用すれば玉田という名前のみ表示されるのか教えてください。
  • 質問の内容は、MySQLのサブクエリを使用した絞込み検索の方法についてです。現在、複数条件で絞り込み検索するWEBアプリを制作中ですが、SQL文が正しくないようでうまく表示されません。具体的には、名古屋というチームに所属し、かつ名前が玉田の選手を表示したいのですが、どのようなSQL文を記述すれば良いでしょうか。
  • MySQLでの絞り込み検索の方法について質問です。現在、名称が「玉田」という選手を表示するためのSQL文を書きたいと思っていますが、うまく表示されません。具体的には、名古屋というチームに所属する選手の中から名前が「玉田」という選手を抽出したいのですが、どのようなSQL文が必要でしょうか。ご教示いただけますと幸いです。
回答を見る
  • ベストアンサー

SQL文でのサブクエリの質問です。

いつもプログラムの質問でお世話になっております。 今回も誠に恐縮ですが今回もご教授いただけたらと思っております。 よろしくお願い致します。 現在、複数条件の絞込み検索のWEBアプリを制作中なのですが MySQLでのSQL文を仮に下記のように入力したら玉田と表示できるようにしたいのですが、何も表示されません。 いろいろ考えたのですが、SQL文の正解がわかりません。 どのように入力したら玉田という名前のみ表示されるのでしょうか? 何卒よろしくお願いします。 SELECT code,name,team_name,price,position,gazou FROM mst_player_market WHERE 1 and (code IN (SELECT playerid FROM team WHERE team_id IN (1))) and (code IN (SELECT name,COUNT(*) FROM mst_player_market GROUP BY name HAVING name = 玉田)); テーブル名 mst_player_market code name price gazou position team_name 15 玉田  70000000 player_bustup_11.jpg FW      名古屋 16 田口  4000000 player_bustup_28.jpg MF      名古屋 17 田鍋  6000000 player_bustup_14.jpg MF      名古屋 18 田中  120000000 player_bustup_04.jpg DF      名古屋 3 津田  40000000 p4389_img2.jpg    FW      徳島  24 長谷川  30000000 p4399_img.jpg       GK      徳島 25 山口  30000000 photo021401851726.jpg MF         千葉 26 ケンペス 50000000 photo011401851481.jpg FW         千葉 テーブル名 team playerid team_id team_name 15 1 名古屋 16 1 名古屋 17 1 名古屋 18 1 名古屋 21 1 名古屋 22 1 名古屋 23 2 徳島 24 2 徳島 25 3 千葉 26 3 千葉 28 2 徳島 29 2 徳島

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

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

  • ベストアンサー
  • maiko0318
  • ベストアンサー率21% (1483/6970)
回答No.2

動くようにするなら SELECT code,name,team_name,price,position,gazou FROM mst_player_market WHERE code IN (SELECT code FROM team WHERE team_id IN (1)) and code IN (SELECT code FROM mst_player_market where name = '玉田') ですね。

sinto58167
質問者

お礼

いつもアドバイスありがとうございます。 説明不足にもかかわらず素晴らしい返答して頂いてありがとうございます。 教えて頂いたSQL文で無事に動きました。 本当にありがとうございました。

その他の回答 (1)

  • hitomura
  • ベストアンサー率48% (325/664)
回答No.1

……えーと、なんでそんなに複雑な SQL 文になっているのでしょうか? とにかく玉田選手のデータを抽出したいなら  SELECT code,name,team_name,price,position,gazou FROM mst_player_market WHERE code=15 で十分なはずです。 そうではなく、○○かつ××な選手という条件で検索したら玉田選手のデータだけがヒットするはずなのにそうならない、というのであれば、その条件を日本語(あるいはあなたの母国語)で補足願います。 ……というか、テーブル構成おかしくね? 自分だったら テーブル名 mst_player_market code name price gazou position team_id 15 玉田 70000000 player_bustup_11.jpg FW      1 16 田口  4000000 player_bustup_28.jpg MF      1 17 田鍋  6000000 player_bustup_14.jpg MF      1 18 田中  120000000 player_bustup_04.jpg DF      1 3 津田  40000000 p4389_img2.jpg    FW      2  24 長谷川  30000000 p4399_img.jpg       GK      2 25 山口  30000000 photo021401851726.jpg MF         3 26 ケンペス 50000000 photo011401851481.jpg FW         3 テーブル名 team team_id team_name 1 名古屋 2 徳島 3 千葉 というふうにするか、加えて position も team と同様の別表にするけど。 あと、複数ポジションを任せられる選手はどうするつもりですか?

sinto58167
質問者

補足

>そうではなく、○○かつ××な選手という条件で検索したら玉田選手のデータだけがヒットするはずなのにそうならない、 仰るとおり、選手名が○○選手かつチームが○○というデータがヒットしないので ご教授いただければということでした。 説明不足すみません。 >加えて position も team と同様の別表にするけど。 あと、複数ポジションを任せられる選手はどうするつもりですか? 確かにそこまで考えてはいなかったです。 テーブル構成も適当過ぎました。 チーム名のカラムが2つのテーブルにあるのでかなり余分でした。 多くのヒントをいただきありがとうございます。

関連するQ&A

  • MySQLについての質問です

    毎回お世話になっています。 今回も知恵を頂けたらありがたいです。よろしくお願い致します。 下記のようなプログラムを組んだところ、ページを開いたらすぐ全データがが出てくる状態になっています。ページを開いても何もデータが出てこない状態にして検索してからデータが出てくるようにするにはどのように書き換えれば良いのでしょうか? <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>リーグデータ</title> <link rel="stylesheet" type="text/css" href="../common/style.css"/> </head> <?php error_reporting( E_ALL ^ E_NOTICE ); ?> <body id="list"> <div id="main"> <form name="search_form" action="player_list.php" method="post"> <input type="hidden" name="cmd" value="search" /> <table> <tr> <th class="th_top">選手名</th> <td class="td_top"> <input type="text" name="name" size="30" value="<?php echo $_POST['name'] ?>"> </td> </tr> <tr> <th>チーム名</th> <td> <input type="checkbox" name="team_id[]" value="1" <?php if (isset($_REQUEST['team_id']) and in_array('1',$_REQUEST['team_id'])) print 'checked'; ?>/> 名古屋 <input type="checkbox" name="team_id[]" value="2" <?php if (isset($_REQUEST['team_id']) and in_array('2',$_REQUEST['team_id'])) print 'checked'; ?>/> 徳島 <input type="checkbox" name="team_id[]" value="3" <?php if (isset($_REQUEST['team_id']) and in_array('3',$_REQUEST['team_id'])) print 'checked'; ?>/> 千葉 <input type="checkbox" name="team_id[]" value="4" <?php if (isset($_REQUEST['team_id']) and in_array('4',$_REQUEST['team_id'])) print 'checked'; ?>/> 浦和 <input type="checkbox" name="team_id[]" value="5" <?php if (isset($_REQUEST['team_id']) and in_array('5',$_REQUEST['team_id'])) print 'checked'; ?>/> 磐田<br /> </td> </tr> <tr> <th class="th_middle"> ポジション </th> <td class="td_middle"> FW MF DF GK </td> </tr> </table> <p> <input type="submit" value="検索"> <input type="reset" value="リセット"> </p> </form> <?php try { $dsn = 'mysql:dbname=xxxxx;host=localhost'; $user = 'xxxxx'; $password = 'xxxxxx'; $dbh = new PDO($dsn,$user,$password); $dbh->query('SET NAMES utf8'); $sql = 'SELECT code,name,team_name,price,position,gazou FROM mst_player_market WHERE 1'; $stmt = $dbh->prepare($sql); $stmt->execute(); $dbh = null; if(isset($_POST['name'])) { $name = htmlspecialchars($_POST['name']); print($name); } if(isset($_POST['name'])) { if(!$_POST['name']==true){print ''; }else{ $sqlN ='code IN (SELECT code FROM mst_player_market where name LIKE ("%'.$_POST['name'].'%"))'; $sql.=' and ('.$sqlN.')'; } } if(isset($_POST['team_id'])and is_array($_POST['team_id'])){ $ary = array_filter($_POST['team_id'], function($v) {return is_numeric($v);}); $sqlA = 'code IN (SELECT playerid FROM team WHERE team_id IN ('.implode(',', $ary).'))'; }else{ print ''; $sqlA = ' 1 '; $flag=false; } $sql.=' and ('.$sqlA.')'; if($flag) $sql.="AND 0 ";; //参考 print $sql."<br>"; //実行 $pdo = new PDO($dsn,$user,$password); $stmt = $pdo->prepare($sql); $stmt->execute(); //画像処理 $rows=array(); while($row = $stmt->fetch(PDO::FETCH_ASSOC)){ $rows[]=$row; }; //参考SQL文表示 print_r($rows); print'選手一覧<br /><br />'; print'</form>'; } catch(Exception $e) { print'ただいま障害により大変ご迷惑をお掛けしております。'; exit(); } ?> <?php foreach((array) $rows as $row ){ ?> <tr> <td><img src="../player/<?php print( htmlspecialchars( $row["gazou"], ENT_QUOTES )); ?>" /></td> <td><?php print( htmlspecialchars( $row["team_name"], ENT_QUOTES )); ?></td> <td>\<?php print( htmlspecialchars( number_format( $row["price"] ),ENT_QUOTES ) ); ?></td> <td> <?php print( htmlspecialchars( $row["name"], ENT_QUOTES ) ); ?> </td> <td> <?php print( htmlspecialchars( $row["position"], ENT_QUOTES ) ); ?> </td> </tr> <?php } ?> </table> </div> <!------------mainのdiv--------------> </body> </html>

    • ベストアンサー
    • MySQL
  • クロアチア戦について・・・

    興味のある方、回答お願いします。 いよいよ明日クロアチア戦ですね。 私たちも気持ちを切り替えて、応援したいですね。 そこで、もしあなたが監督だったらどのようなスタメンでどのような布陣で挑みますか?期待する選手は?だれが活躍?など予想してみませんか?理想のチーム。 私は4-4-2でFWを玉田、柳沢・MFヒデと中村を攻撃的にしたいです。大黒・巻を後半15分くらいで投入。さらに攻撃!そして川口のファインセーブ・中沢のヘッドに期待したいです。

  • 前のidをコピーするSQL文

    MySQLを使って管理画面を作っております。 $sql='INSERT INTO players(name,price,position_id) VALUES(?,?,?)'; という文で使ったidをコピーしてから次のINSERTの文でそのidの番号を使って別テーブルのカラムにその番号をINSERTするしくみを作りたいのですがなかなか上手くいきません。 var_dump($last_id);では番号がコピーされているのですが、INSERTができません。 いつもお世話になってしまい大変恐縮なのですが、どなたかご教授いただけないでしょうか?よろしくお願い致します。 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <link rel="stylesheet" type="text/css" href="../../xxxxx/team.css"/> <title>選手追加完了</title> </head> <body> <div id="main"> <?php $pro_name=$_POST['name']; $pro_price=$_POST['price']; $pro_position_id=$_POST['position_id']; $pro_team=$_POST['team_name']; $pro_name=htmlspecialchars($pro_name); $pro_price=htmlspecialchars($pro_price); $pro_position_id=htmlspecialchars($pro_position_id); $pro_team=htmlspecialchars($pro_team); $dns = "mysql:host=localhost; dbname=player;charset=utf8"; $dns_id = "xxxxx"; $dns_pw = "xxxxxxx"; try { $conn = new PDO($dns, $dns_id, $dns_pw, array(PDO::ATTR_EMULATE_PREPARES => false)); } catch (Exception $e) { echo 'ERROR: ' . $e->getMessage(); die(); } try { //トランザクションを開始する。オートコミットがオフになる $conn->beginTransaction(); //処理その(1) $sql='INSERT INTO players(name,price,position_id) VALUES(?,?,?)'; $stmt=$conn->prepare($sql); $data[]=$pro_name; $data[]=$pro_price; $data[]=$pro_position_id; $stmt->execute($data); //直近id取得 $last_id_sql = "SELECT LAST_INSERT_ID() as id"; $stmt = $conn->prepare($last_id_sql); $stmt->execute(); $last_id = $stmt->fetch(PDO::FETCH_ASSOC); $stmt->closeCursor(); //確認var_dump($last_id); //処理その(2) $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql2='INSERT INTO team(team_id,team_name) VALUES(?,?)'; $stmt=$conn->prepare($sql2); $data2[]=$pro_team; $data2[]=$last_id; $stmt->execute(array($last_id,$pro_team)); $stmt->closeCursor(); //確認var_dump($last_id); //変更をコミットする $conn->commit(); } catch(PDOException $e){ //変更をロールバックする $conn->rollBack(); echo 'ERROR:' . $e->getMessage(); } // 切断 $conn = null; print $pro_name; print'を追加しました。<br />'; ?> <a href="xxxxx">戻る</a> </div><!--main--> </body> </html>

    • ベストアンサー
    • MySQL
  • PHPにフォームについて質問です。

    つい最近ここで教えていただいたフォームのプログラムなのですが、どのように組み合わせるのかわからない状態でうまく反映できません。自分で出来ると思ったのですが出来ませんでした。 前回途中で質問終わらせてしまったことは後悔していますが今回もどうかご教授いただきたいです。 下記のように入力しましたが検索したあとに名前はフォームに表示されている状態なのですが、チェックボックスのチェックは検索した後に消えてしまいます。 チェックを検索したあとにも残るようにするにはどのように入力すれば良いでしょうか? どうかよろしくお願い致します。 <?php $value=array(); //想定するデータを初期化しておく $value['name']=""; if(isset($_REQUEST['name'])){ $value['name']=htmlspecialchars($_REQUEST['name'],ENT_QUOTES,'UTF-8'); } $checked=array(); //想定するデータを初期化しておく $checked['team_id']=array(1=>"",2=>"",3=>"",4=>"",5=>""); if(isset($_REQUEST['team_id']) and is_array($_REQUEST['team_id'])){ foreach($_REQUEST['team_id'] as $val){ $checked['team_id'][$val]=" checked"; } } ?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>リーグデータ</title> <link rel="stylesheet" type="text/css" href="../common/style.css"/> </head> <body id="list"> <div id="main"> <form name="search_form" action="xxxxxxxx.php" method="post"> <input type="hidden" name="cmd" value="search" /> <table> <tr> <th class="th_top">選手名</th> <td class="td_top"> <input type="text" name="name" size="30" value="<?php echo "{$value['name']}" ?>"> </td> </tr> <tr> <th>チーム名</th> <td> <input type="checkbox" name="team_id[]" value="1"{$checked['team_id'][1]}/>名古屋 <input type="checkbox" name="team_id[]" value="2"{$checked['team_id'][2]}/>徳島 <input type="checkbox" name="team_id[]" value="3"{$checked['team_id'][3]}/>千葉 <input type="checkbox" name="team_id[]" value="4"{$checked['team_id'][4]}/>浦和 <input type="checkbox" name="team_id[]" value="5"{$checked['team_id'][5]}/>磐田 <br /> </td> </tr> <tr> <th class="th_middle"> ポジション </th>

    • ベストアンサー
    • PHP
  • SQLのサブクエリについて

    サブクエリについて質問です。MySQLで作成した以下の投稿(post)テーブルとコメント(comment)テーブルがあります。サブクエリを使用し、投稿テーブルのタイトルごとにcomment_dateが2017年04月13日から2017年04月19日の範囲内でコメントが何件あるかを取得するSQLはどのように記述できますか?

  • MySQL更新

    サッカー選手の出場時間やゴール数をデータベースに格納しています。 これまでは試合の度にphpMyAdminを利用して直接入力していたのですが、もっと簡単に更新作業が出来ないかと更新フォームを作成しデータを更新しようと考えています。 下記サイトを見て他のテーブルの更新は出来たのですが、この選手テーブルの更新をどうすればいいのか分かりません。 http://ponk.jp/php/basic/php_mysql#page_index4 テーブル名:active_player2 last_name(VARCHAR型)|goal(INT型)|comeout_time(INT型) 加藤|5|180 田中|3|270 佐藤|0|235 やりたい事は二点あります。 二点ともポジション別に全選手をずらっと並べ(チェックボックス)、対象選手にチェックを入れて更新ボタンをクリックしたら予め決めている数字を今の数字に加えて格納したいです。 (1)得点を挙げた選手 得点を挙げた選手にチェックを入れて更新ボタンを押すと、チェックを入れた選手のgoalに「1」が追加される。 (2)フル出場した選手 サッカーの場合、一試合で三人まで交代できるので少なくとも8選手はフル出場することになります。 そこでフル出場した8選手にチェックを入れて更新ボタンをを押すとその選手のcomeout_timeに「90」が追加される。 現在のコードは下記のようになっています。 player-update.htmlにフォームを設け、player-update2.htmlでデータを更新しようと考えています。 <?php function pt_set($pt,$checbox_name){ global $dbh; $sql = 'SELECT * FROM active_player2 WHERE position LIKE "%'.$pt.'%"'; foreach ($dbh->query($sql) as $row) { print '<input type="checkbox" name="'.$checbox_name.'" value="'.$row['last_name'].'">'.$row['last_name'].'</label>'; } return; } ?> <form action="player-update2.html" method="post"> <table> <tr> <th width="170">得点者</th> <td colspan="3"><p>DF</p> <?php pt_set("DF","goal"); ?> <p>MF</p> <?php pt_set("MF","goal"); ?> <p>FW</p> <?php pt_set("FW","goal"); ?> </td> </tr> <tr> <th width="170">フル出場</th> <td colspan="3"><p>GK</p> <?php pt_set("GK","full"); ?> <p>DF</p> <?php pt_set("DF","full"); ?> <p>MF</p> <?php pt_set("MF","full"); ?> <p>FW</p> <?php pt_set("FW","full"); ?> </td> </tr> </table> <input type="submit" value="更新する" style="width:300px;height:40px"> </form> これをplayer-update2.htmlに送信して、どのようにデータを追加すればいいのか分かりません。 ご存知の方いらっしゃいましたらご教示ください。 よろしくお願いします。

    • 締切済み
    • PHP
  • 候補画像から選択して画像をアップロード

    通常、画像のアップロードは <form action="upload.php" method="post" enctype="multipart/form-data"> <p> 画像をアップロードする<br> <input type="file" name="pic"> </p> <p> <input type="hidden" name="code" value="<?php echo $code ?>"> <input type="submit" name="submit" value="アップロード"> </p> </form> というフォームを使っています。 ↓ ★画像アップロードフォーム http://pips.chu.jp/0/up/upload.php これで、「参照」を押すと、ローカルのフォルダから画像を選べますが、 あらかじめ作成した画像の候補の中から1つ選んでアップロードするにはどうすればよいでしょうか。 画像の候補は、「img」というフォルダを作り、その中に格納しています。 ↓ ★候補画像 http://pips.chu.jp/0/up/img/sample1.jpg http://pips.chu.jp/0/up/img/sample2.jpg http://pips.chu.jp/0/up/img/sample3.jpg 「参照」のボタンを押すと、「img」フォルダに行く方法が知りたいです。 また、ラジオボタンやセレクトボタンを使った方法があれば教えて頂けないでしょうか。 何卒よろしくお願いします。

    • ベストアンサー
    • PHP
  • INSERT文でサブクエリ

    SQLServer初心者です。 使用DBはSQLServer2005です。 SQLServerではInsert文でサブクエリは使用できませんか? 例) INSERT INTO TmpA (a,b) VALUES ( 1,(SELECT TmpB.b FROM TmpB)) を実行しましたところ、 『メッセージ 1046、レベル 15、状態 1、行 12 このコンテキストではサブクエリは許可されません。スカラ式だけが許可されます。』 とのエラーが発生しました。 何らかの工夫で実装できる方法がありましたら、 教えて下さいませんか?

  • SQL文について質問です。

    SQL文について質問です。 取引先マスターを作成しています。 その際に T_取引先マスターに一つのテーブルから2つの フィールドを抽出する方法をアドバイス下さい。 T_Agentには営業マンとアシスタントの名前が格納されています。 T_Companyには営業マン用フィールドとアシスタント用フィールドがあります。 T_Agentから営業マンとアシスタントの名前を取り出すにはどのしたらよろしいですか? フロム句に以下を入れるとエラーになります。 FROM (T_Company AS Com LEFT JOIN T_Agent AS Agen ON Com.Agent = Agen.ID) LEFT JOIN (SELECT * FROM T_Agent WHERE PositionName = "アシスタント") AS T_Assistant ON T_Company.Assistant = T_Assistant.ID アドバイスよろしくお願いいたします。

  • SQL文の質問

    SQL文で質問です。 コード 状態 1 0 1 1 2 0 3 1 のようにあった場合、 コード毎にみて、状態1があるコードは 結果に出さないようにしたいのです。 期待する結果は、 コード 状態 2 0 です。 どのようなSELECT文にしたらできますか? よろしくお願いします。