JOIN後同一名カラムから値がとれない

このQ&Aのポイント
  • mysqlでJOINした後、値を取得する方法がわかりません。
  • c_diaryテーブルとc_memberテーブルには両方にr_datetimeという列があります。
  • SELECT * FROM c_diary left join c_member on c_diary.c_member_id = c_member.c_member_idとやっているのですが、値が入らず空白となってしまいます。
回答を見る
  • ベストアンサー

JOIN後同一名カラムから値がとれない

こんにちは、mysqlでJOINした後、値を取得したいのですが、 2つのテーブルに値があり、片方を指定して取得する方法がわかりません。 いろいろ調べてみたのですがわかりませんでした。 どなたかご存知の方がいたら教えてください。 c_diary テーブルと c_member テーブルには、両方にr_datetimeという列があります。 それを別々の変数に代入したいのですが、うまくいきません。 SELECT * FROM c_diary left join c_member on c_diary.c_member_id = c_member.c_member_id $rs = mysql_query($sql); while ($item = mysql_fetch_array($rs)) { $c_diary_r_datetime = $item['c_diary.r_datetime']; $c_member_r_datetime = $item['c_member.r_datetime'] echo $c_diary_r_datetime."/".$c_member_r_datetime; } とやっているのですが、値が入らず空白となってしまいます。 どなたか、解決法をご存知の方がいたら教えてください。

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

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

基本を理解していないですね? SELECTで*は、テストレベル以外で使ってはいけません。 $sql="SELECT c_diary.r_datetime as c_diary_r_datetime c_member.r_datetime as c_member_r_datetime FROM c_diary left join c_member on c_diary.c_member_id =c_member.c_member_id" と抽出するデータはユニークな名前になるよう別名をつけて列記します

yoshihit
質問者

お礼

ご回答ありがとうございます。 助かりました、うまくいきました! *使っちゃだめなんですね。 なんか個別に指定すると処理が遅くなるのではと勘違いしてました。 もっと勉強します。ありがとうございました!

関連するQ&A

  • 値が「1」のカラム名を求めたい。

    任意の列の、値が「1」のカラム名を求めるにはどうしたらいいでしょうか? PHP Version 5.1.6 MySQL - 5.0.45 で運用しています。 そもそものテーブルの作り方がおかしいのかも知れませんが、 以下のようになっています。 このテーブルで、IDが「40」の列の値が「1」のカラム名を求めたいのです。 どの様にしたらいいでしょうか? ※カラム名「会員番号110」は実際は整数になっています。 ID  会員番号110  会員番号111  会員番号112  会員番号113  40  1       1       0       1       41  0       1       1       1   $sql ="select * from `member_sub_tbl` where `ID`='$ID'"; $result = mysql_query($sql, $con); //カラムの数を取得する $numFields = mysql_num_fields($result); for($i=0;$i<$numFields;$i++){ $nameFields[] = mysql_field_name($result, $i); } print_r($nameFields); これで、カラム名は全て配列に入るのですが、値が「1」のと限定する方法がわかりません。 ご教授、よろしくお願いいたします。    

    • ベストアンサー
    • PHP
  • LEFT JOIN と GROUP BY

    こんにちは。 以下の2つのテーブルを結合して、 subcategory_item_idごとのアンケート数を取得したいと思っております。 サブカテゴリー項目テーブル subcategory_item_id category_id subcategory_id subcategory_item_name content image_url アンケート詳細テーブル enquete_detail_id enquete_id store_id category_id subcategory_id subcategory_item_id 試しに作成した以下のSQL文でMySQLで実行したところ、アンケート詳細テーブルにsubcategory_item_idが含まれていない場合も件数0のレコードとして取得したいのですが、うまく取得できませんでした。 select sci.subcategory_item_id, sci.subcategory_item_name, count(ed.enquete_detail_id) c from subcategory_item sci left join enquete_detail ed on (ed.subcategory_item_id = sci.subcategory_item_id) group by ed.subcategory_item_id お手数をおかけしますが、ご教授いただけると助かります。 よろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • 複数テーブルから全データ取得する際、同カラムあり

    SELECTで複数テーブルから、全カラム値を取得する際、同名カラムがあったとき、指定テーブルの値を取得したいのですが、どうすれば良いでしょうか? ◆前提 ・テーブル「r1」 ・テーブル「t1」 ・テーブル「u1」 ※「r1」「u1」には、同名カラム「z2」あり ◆やりたいこと ・条件一致する全てのデータを取得したい ・但し、「z2」カラムの値は、「r1」テーブルの値を取得したい ◆現状 $sql="SELECT * FROM (`r1`) JOIN `t1` JOIN `u1` ON `r1`.`tid` = `t1`.`tid` And`r1`.`uid` = `u1`.`uid`"; ◆疑問 3つのテーブルから条件一致するデータを全て取得しているのですが、 「r1テーブル」「u1テーブル」に同じカラム名(z2)があるためか、 取得結果のz2内容が、「u1テーブル」の「z2カラム」値となっています(多分…)。 この時、「r1テーブル」の「z2カラム」を取得するには、どうすれば良いでしょうか? (「r1テーブル」の「z2カラム」だけを単独で取得したいわけではなく、「SELECT * 」結果した際の「z2カラム」の値を「r1テーブル」のものにしたいです)

    • ベストアンサー
    • MySQL
  • JOINを使ったSQL文を作成しようとしています。

    JOINを使ったSQL文を作成しようとしています。 以下の様な3つのテーブルがある場合のSQL文を教えて下さい ※勉強の為、適当なテーブルを作成しましたが、やりたい事は  JOINの中に更にJOINさせたSQL文を作成したいと思ってます 表A  USER_ID(プライマリキー)  NAME 表B  USER_ID(プライマリキー) ※表A.USER_IDと紐着く  BUMON(プライマリキー)  TERM(プライマリキー) 表C  BUMON(プライマリキー) ※表B.BUMONと紐着く  TERM(プライマリキー) ※表B.TERMと紐着く  MEMBER 【取得したい項目】  表A.USER_ID 【抽出条件】  表CのMEMBERの値が'10','20'以外(である表AのNAMEを取得)

  • 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になります。よろしくお願いいたします。

  • Doctrineのjoinについて

    symfony+Doctrineで開発をしています。 他のプログラムは経験があるもののPHP初心者です。 2つのテーブルをjoinして、両テーブルの結果を取得します。 where句の条件どおりに行数を得られているので、 joinはできていると思います。 でも、結果を取得することが出来ません・・。 具体的には、joinしたテーブル(BTable)のカラムを取得しようとすると、 「Unknown record property / related component "value" on "ATable"」というエラーが出てしまいます。 (ATableにはvalueなんてないよ、って言っているみたいですが) ●ソースはこんな感じ $query = Doctrine_Query::create() ->select('a.name, b.value') ->from('ATable a') ->innerJoin('a.Btable b') ->where('b.id = ?', $id); $list=$query->execute(); foreach($list as $xxx){ print_r($xxx['name']); print_r($xxx['value']);←ここでエラー } ●エラーメッセージ Unknown record property / related component "value" on "ATable" そこで質問させてください。 ・xxx['value']の箇所は、どのように記述すればいいのでしょうか? ・もしくは、Doctrineではjoinしたテーブルの値は取得できないのでしょうか?  (webでいろいろ調べましたが、joinの例はあるものの、select結果を使う、といった例が見つかりませんでした・・) 方法がないのであれば、 あらかじめテーブルをjoinしたviewを作って、 それをselectするようにしようと思っています。 symfony+Doctrineに詳しい方がいらっしゃたら、 よろしくおねがいします。

    • ベストアンサー
    • PHP
  • 配列にダブルクォーテーション付の値をいれたい

    以下のようにmemberテーブルから抽出したnameKanji配列に、 ダブルクォーテーション付の値をいれたいのです。 memberテーブルには、 1.田中 2.斉藤 3.鈴木 とはってるとして、 $array_nameKanji配列には、最終的に、 {"田中","斉藤","鈴木"} といれたいのです。 ***************************************** $sql = "SELECT nameKanji FROM member"; $rs = mysql_query($sql,$conn); $totalMember = mysql_num_rows($rs); for($i=0 ; $i<$totalMember ; $i++) { $rec = mysql_fetch_assoc($rs); → $array_nameKanji[$i] = $rec["nameKanji"]; } *************************************************** たとえば、 $array_nameKanji[$i] = "\"" . $rec["nameKanji"] . "\""; こうしてみると、 {"""田中""","""斉藤""","""鈴木"""} となってしまいます。 うまくやる方法をおしえてください。

    • ベストアンサー
    • PHP
  • 結合したテーブルの特定カラムのカウントについて

    PHPを学習しており、MySQLでデータベースにPDOで接続をしています。 添付画像のようなチームのデータを管理するテーブル(teamテーブル)と メンバーのデータを管理するテーブル(memberテーブル)があり、 teamテーブルのkeywordカラムを検索条件にし、 keywordカラムの値が『keyword1』と一致するteamテーブルのレコードの teamcodeカラムの値と一致する値を持つ memberテーブルのレコード数をカウントして teamテーブルから『teamcode』、『teamname』、『teamkana』、『date』を取得し、memberテーブルでの『teamcode』の該当数を取得したいです。 OUTER JOINして、NULLIFやCOALESCEなどを使用して試してみたのですが、 構文の使い方が悪いのか、そもそも使うべきSQL文が違うのかわかりませんが、 添付画像の『teamcode』の値が『0004』のもののように memberテーブルに該当する値が存在しないものは NULLになってしまい、取得ができませんでした。 できればmemberテーブルに該当する値が存在しない場合は「0」として取得したいです。 このような場合、どのようなSQL文を記述したら良いのでしょうか? 少しややこしい内容ですので、説明が不足していたり、 説明が分かりづらいようであれば補足します。 ご回答、よろしくお願いします。

    • ベストアンサー
    • PHP
  • NULLだったら、aカラムの値をbカラムへコピー

    ■前提 ・MySQLの同じテーブル内に、datetime型の「aカラム」「bカラム」がある ■質問 ・この時、bカラムがNULLだったら、aカラムの値をbカラムへコピーするSQL文を教えてください

    • ベストアンサー
    • MySQL
  • JOINのJOIN?

    こんにちは。 本のデータベースを作っています。 ソート部分を作っています。 本の一覧から大分類でソートさせたいのですが、階層的なテーブルのJOINする方法が分かりません。 テーブルは下記のようになっています。 ---------------------------------------------------------------- DAI_BUNRUI_TBL(大分類) +-------+--------+ | D_ID |NAME| +====+====+ |  1 |D_N1| |  2 |D_N2| +-------+-------+ CHU_BUNRUI_TBL(中分類) +------+--------+--------+ | C_ID | D_ID |NAME| +====+====+====+ |  1 |  1 |C_N1| |  2 |  1 |C_N2| |  3 |  2 |C_N3| |  4 |  2 |C_N4| |  5 |  2 |C_N5| +-------+--------+-------+ HON_TBL(本のテーブル) +-------+--------+--------+ | H_ID | C_ID | NAME| +====+====+=====+ |  1 |  1 | Foo1| |  2 |  1 | Foo2| |  3 |  2 | Foo3| |  4 |  2 | Foo4| |  5 |  2 | Foo5| +-------+--------+--------+ ---------------------------------------------------------------- HON_TBLのC_IDとCHU_BUNRUI_TBLのC_IDをJOINTするには下記のようになると思いますが、 SELECT * FROM HON_TBL JOIN CHU_BUNRUI_TBL ON HON_TBL.C_ID = CHU_BUNRUI_TBL.C_ID ; さらにCHU_BUNRUI_TBLのD_IDとDAI_BUNRUI_TBLのD_IDを結合するにはどのようにするばよろしいのでしょうか?

    • ベストアンサー
    • MySQL