質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
JOIN

これはSQL文のJOINに関するタグです。リレーショナルデータベースシステムの二つ以上のテーブルを結合する際に、この構文が利用されます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

MAMP

Mac 上で WordPress などの動的ページのサイトが作れるように環境を構築するフリーソフト

Q&A

解決済

1回答

990閲覧

SQL JOIN内部結合

n_k23

総合スコア21

JOIN

これはSQL文のJOINに関するタグです。リレーショナルデータベースシステムの二つ以上のテーブルを結合する際に、この構文が利用されます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

MAMP

Mac 上で WordPress などの動的ページのサイトが作れるように環境を構築するフリーソフト

0グッド

0クリップ

投稿2021/12/04 05:59

編集2021/12/04 06:00

前提・解決したいこと

/tech.pjin.jp/blog/2017/06/08/sql練習問題-問58/
上記の問題をphpMyadmin上で解答する際は答えのように表示されるのだが、
MAMPのローカルサーバで出力しようとするとc.nameが表示されない。

解答写真
イメージ説明

発生している問題

var_dumpで表示する際にc.nameが表示されない

PHP

1コード 2<?php 3//DB接続 4 //公開するためpass等は隠しています。接続は問題なしです。 5 $dsn = "*********"; 6 $user = "*********"; 7 $pass = "*********"; 8 9try { 10 $dbh = new PDO($dsn,$user,$pass,[ 11 PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, 12 ]); 13 //SQLの準備、データの取得 14 $sql = 15       'SELECT c.name, p.name, p.uniform_num 16 FROM players p 17 JOIN countries c ON c.id = p.country_id'; 18 // echo "<pre>"; 19 // var_dump($sql); 20 // echo "</pre>"; 21 // exit(); 22 //SQLの実行 23 $stmt = $dbh->query($sql); 24 // echo "<pre>"; 25 // var_dump($stmt); 26 // echo "</pre>"; 27 // exit(); 28 //SQLの結果を受け取る 29 $result = $stmt->fetchAll(PDO::FETCH_ASSOC); 30 echo "<pre>"; 31 var_dump($result); 32 echo "</pre>"; 33 exit(); 34 $dbh = null; 35} catch(PDOException $e) { 36 echo '接続失敗'.$e->getMessage(); 37 exit(); 38} 39//出力結果 40array(736) { 41 [0]=> 42 array(2) { 43 ["name"]=> 44 string(24) "ジュリオセザール" 45 ["uniform_num"]=> 46 string(2) "12" 47 }~~~~~ 48 49 50?>

試したこと

var_dumpで各変数毎に出力してみたが変化わからず。
PHP公式にてPDOを確認してみるも異常があるか判断できず。
SELECTのところでnameの順番を変えてみると結果が変わった。
出力結果をみるとname値が代入され変化している。そのためname値が一つしかなく
片方のテーブルのnameしか表示されないのがわかった。
なのでJOINした際の結合等を見直してみたが修正できず
質問させていただきます。

php

1コード 2$sql = 3       'SELECT p.name, p.uniform_num, c.name 4 FROM players p 5 JOIN countries c ON c.id = p.country_id'; 6//出力結果 7array(736) { 8 [0]=> 9 array(2) { 10 ["name"]=> 11 string(12) "ブラジル" //c.nameに変化した 12 ["uniform_num"]=> 13 string(2) "12" 14 } 15

(そのQ&Aにも解説なし)

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

c.namep.nameで列名が重複しているので、SELECT c.name as c_nameのように別名を付けないと上書きされる、という状況かもしれません。

投稿2021/12/04 06:02

maisumakun

総合スコア146018

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2021/12/04 06:03

PHPの連想配列は、同じキーを複数持てません。
n_k23

2021/12/04 06:07 編集

ご回答ありがとうございます。 試したところ問題なく表示されました。 phpMyadmin上問題なく表示されたのでsql文は問題ないと思い込んでしまいました。 出力される際は連想配列になるというところが抜けていました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問