お世話になります。MySQLのJOINに関して質問させてください。
現在、勉強がてらに社内で利用しているメールを1元管理するようなシステムを作っています。
送受信したメール情報はDBに保存いたしますが、そのデータを呼び出す際に、躓いてしまい質問させていただきました。
今回のメール機能におけるテーブルは以下、3つです。(本質問において不必要なカラムは省略いたします。文中にあるyahooとgoogleに意味はありません)
●mail(メールのデータを残しておくテーブル)
mail_no | mail_account_id | mail_title | mail_address -------------------------------------------------------------- 1 yahoo 件名1 aaa@***.com 2 yahoo 件名2 bbb@***.com 3 yahoo 件名3 bbb@***.com 4 yahoo 件名4 ccc@***.com 5 google 件名5 ccc@***.com
■customer(顧客情報が登録されているテーブル。mailテーブルとはメールアドレスで紐づいているが、はじめての顧客などの場合は顧客情報がない場合がある)
cust_id | cust_account_id | cust_tanntousha_no | cust_name | cust_mail -------------------------------------------------------------------------------- 1 yahoo 2 森 bbb@***.com 2 yahoo 0 藤田 ccc@***.com 3 google 1 藤田 ccc@***.com
●tanntousha(顧客につく担当者テーブル。顧客テーブルのcust_tanntousha_noにて紐づいている)
tanntou_no | tanntou_account_id | tanntou_name ------------------------------------------------------ 1 yahoo 小島 2 google 渡辺
以上のような内容ですが、欲している結果と現状を報告すると」mailテーブルを基に、yahooで呼出した場合
件名 | アドレス | 名前 | 担当者名 ----------------------------------------------- 件名1 aaa@***.com --- ---- 件名2 bbb@***.com 森 小島 件名3 bbb@***.com 森 小島 件名4 ccc@***.com 藤田 ---
となるようしたいが、現在は、
件名 | アドレス | 名前 | 担当者名 ----------------------------------------------- 件名1 aaa@***.com --- ---- 件名2 bbb@***.com 森 小島 件名3 bbb@***.com 森 小島 件名4 ccc@***.com 藤田 --- 件名4 ccc@***.com 藤田 渡辺
となっており、他方、googleで呼出した場合、
件名 | アドレス | 名前 | 担当者名 ----------------------------------------------- 件名5 ccc@***.com 藤田 渡辺
となるようしたいが、現在は、
件名 | アドレス | 名前 | 担当者名 ----------------------------------------------- 件名5 ccc@***.com 藤田 --- 件名5 ccc@***.com 藤田 渡辺
となっています。
なお、上記の結果を返している現在のSQLは、(mailテーブルにあるデータは、顧客情報にないメールがあり、さらには担当者がないメールもある)、
$sql = "SELECT mailbox.mail_no, mail.mail_account_id, mail.mailbox_title, mail.mailbox_address, customer.cust_id, customer.cust_account_id, customer.cust_tanntousha_no, customer.cust_name, customer.cust_mail, tanntousha.tanntou_no, tanntousha.tanntou_account_id, tanntousha.tanntou_name FROM mail LEFT JOIN customer ON mail.mail_address = customer.cust_mail LEFT JOIN tanntousha ON customer.cust_tanntousha_no = tanntousha.tanntou_no WHERE mail.mail_account_id = 'yahoo' ORDER BY $order LIMIT $st, $lim;";
何度も修正をしては確認を繰返しておりますが、解決の糸口が見えないための質問です。
お忙しい中恐縮ですが、アドバイスのほど、よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー