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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

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

Q&A

2回答

1519閲覧

件数の取得

chapp

総合スコア233

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

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

0グッド

0クリップ

投稿2015/12/29 12:52

お世話になっております。PHPでMySQLを操作する会員サイトを作っています。
会員データを一覧で表示するところで、その会員から過去に問合せがあった場合、その問合せ件数を表示させたいと考えています。

イメージ的には、、、

氏名 会員ステータス 問合せ件数
佐藤一郎 Aクラス 4件
斉藤雅史 Bクラス -件
渡辺和子 Aクラス 2件

とこんな感じですが、どのようなSQL文になるのでしょうか?

会員情報の会員テーブルと、お問合せ情報を残したお問合せテーブル、そして会員ステータスなど複数のテーブルを接合した形になります。

単純に会員テーブル、お問合せテーブルと、2つのテーブルだけであれば作れたのですが、勉強不足でGROUP BY括っているため、思ったような結果が返ってこない状況になっています。(同じ氏名が並んでしまう)

複数のテーブルを接合したときどのようなSQLとなるのでしょうか?
現在、LEFT JOINで3つのテーブルを接合しており、お問合せテーブルをあわせると4つのテーブルとなります。
お忙しいところ恐縮ですが、ご教示いただければ幸いです。
よろしくお願い申し上げます。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2016/01/05 04:29

こちらの質問が他のユーザから「質問の範囲が広すぎる」という評価を受けています わからない点を明確にし、調査したこと・試したことと共に記入していただくと、回答が得られやすくなります。
guest

回答2

0

system_customerが会員テーブル

tanntoushaが担当となるスタッフのテーブル
statusが例にあるステータス名が登録されているテーブル

sql

1SHOW CREATE TABLE system_customer; 2SHOW CREATE TABLE tanntousha; 3SHOW CREATE TABLE status;

それぞれの実行結果を提示してください。

投稿2015/12/29 19:24

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

chapp

2015/12/30 06:19

Kosuke_Shibuyaさん はじめまして。お休みのところ親切なご対応ありがとございます。 お返事遅くなってしまいましたが、以下が実行した結果です。 ここへ掲載するにあたり、無駄なカラムも多くあるので、いくつか省略して掲載いたします。 引き続き、ご指導のほどお願いできれば幸いです。 よろしくお願いします。 CREATE TABLE `system_customer` ( `customer_id` int(11) NOT NULL AUTO_INCREMENT, `customer_account_id` varchar(255) NOT NULL, `customer_tanntousha_no` int(11) NOT NULL, `customer_name1` varchar(255) NOT NULL, `customer_name2` varchar(255) NOT NULL, `customer_mail` varchar(255) NOT NULL, `customer_pass` varchar(255) NOT NULL, `customer_postno` varchar(16) NOT NULL, `customer_address1` varchar(32) NOT NULL, `customer_address2` varchar(255) NOT NULL, `customer_address3` varchar(255) NOT NULL, `customer_address4` varchar(255) NOT NULL, `customer_regist_date` datetime NOT NULL, `customer_edit_date` datetime NOT NULL, `customer_regist_user` varchar(16) NOT NULL, `customer_status_no` int(11) DEFAULT NULL, PRIMARY KEY (`customer_id`), KEY `customer_account_id` (`customer_account_id`,`customer_tanntousha_no`) ) ENGINE=MyISAM AUTO_INCREMENT=21 DEFAULT CHARSET=utf8 CREATE TABLE `tanntousha` ( `tanntousha_no` int(11) NOT NULL AUTO_INCREMENT, `tanntousha_account_id` varchar(255) NOT NULL COMMENT 'est_corporated アカウントID', `tanntousha_name` varchar(255) NOT NULL COMMENT '担当者名', `tanntousha_mail` varchar(255) NOT NULL, `tanntousha_pass` varchar(255) NOT NULL, KEY `tanntousha_no` (`tanntousha_no`,`tanntousha_account_id`) ) ENGINE=MyISAM AUTO_INCREMENT=11 DEFAULT CHARSET=utf8 CREATE TABLE `inquiry` ( `inquiry_no` int(11) NOT NULL AUTO_INCREMENT, `inquiry_account_id` varchar(255) NOT NULL, `inquiry_customer_id` int(11) NOT NULL, `inquiry_goods_no` int(11) NOT NULL, `inquiry_subject` varchar(255) NOT NULL, `inquiry_exp` varchar(255) NOT NULL, `inquiry_date` datetime NOT NULL, PRIMARY KEY (`inquiry_no`), KEY `inquiry_account_id` (`inquiry_account_id`) ) ENGINE=MyISAM AUTO_INCREMENT=19 DEFAULT CHARSET=utf8 COMMENT='サイト経由でのユーザからの問合せ内容'
退会済みユーザー

退会済みユーザー

2016/01/08 17:44

SELECT `customer_name1` , `customer_name2` , `customer_status_no` , COUNT(IQ.`inquiry_no`) FROM `system_customer` SC LEFT JOIN `inquiry` IQ ON SC.`customer_id` = IQ.`inquiry_customer_id` WHERE SC.`customer_id` IS NOT NULL; フィールドの内容わからんから、結合条件適当。
guest

0

テーブルレイアウトが分からないのでアレですが

sql

1SELECT 2会員テーブル.氏名, 3会員ステータステーブル.会員ステータス, 4IFNULL(お問合せテーブル’.問合せ件数, '-') || '件' AS 問合せ件数 5FROM 6会員テーブル 7LEFT JOIN 会員ステータステーブル 8ON 会員テーブル.会員ID = 会員ステータステーブル.会員ID 9LEFT JOIN ( 10SELECT 11会員ID, COUNT(会員ID) AS 問合せ件数 12FROM 13お問合せテーブル 14GROUP BY 15会員ID 16) お問合せテーブル’ 17ON 会員テーブル.会員ID = お問合せテーブル’.会員ID

こんな感じでしょうか?

投稿2015/12/29 13:31

hyper-drums-ko

総合スコア736

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

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

chapp

2015/12/29 13:58

hyper-drums-koさん はじめまして。 お疲れのところご親切な回答をありがとうございます。 早速とばかり試してみましたが、 IFNULL(お問合せテーブル’.問合せ件数, '-') || '件' AS 問合せ件数 この部分がどのような記述にしたら良いのか良く分かりません。 以下にて現在のSQL文、そしてテーブルに関して書き残しますので、再度ご教示頂けると幸いです。 $sql = "SELECT system_customer.customer_id, system_customer.customer_account_id, system_customer.customer_tanntousha_no, system_customer.customer_name, status.status_no, status.status_title, tanntousha.tanntousha_no, tanntousha.tanntousha_account_id FROM system_customer LEFT JOIN tanntousha ON system_customer.customer_tanntousha_no = tanntousha.tanntousha_no LEFT JOIN status ON system_customer.customer_status_no = status.status_no WHERE system_customer.customer_account_id = '$corporate_account_id' ORDER BY customer_id DESC LIMIT $st, $lim;"; system_customerが会員テーブル tanntoushaが担当となるスタッフのテーブル statusが例にあるステータス名が登録されているテーブル となっており、これらとは別に問合せがあった際にその内容を残してあるinquiryというテーブルがあります。 このテーブルは inquiry_no  inquiry_account_id  inquiry_customer_id  inquiry_reins_id  inquiry_subject といったの構造となっており、 会員テーブルにあるcustomer_idカラムと、inquiry_customer_idが紐付くものとなっています。 そこで $sql = "SELECT system_customer.customer_id, system_customer.customer_account_id, system_customer.customer_tanntousha_no, system_customer.customer_name, status.status_no, status.status_title, tanntousha.tanntousha_no, tanntousha.tanntousha_account_id, count(inquiry.inquiry_no) AS count FROM system_customer LEFT JOIN tanntousha ON system_customer.customer_tanntousha_no = tanntousha.tanntousha_no LEFT JOIN status ON system_customer.customer_status_no = status.status_no LEFT JOIN inquiry ON system_customer.customer_id = inquiry.inquiry_customer_id WHERE system_customer.customer_account_id = '$corporate_account_id' GROUP BY system_user_inquiry.inquiry_customer_id ORDER BY customer_id DESC LIMIT $st, $lim;"; としてみたのですが、会員情報そのものも上手く拾えていない状況となっています。 以上ですが、よろしくお願い申し上げます。
hyper-drums-ko

2016/01/05 01:11

> 会員情報そのものも上手く拾えていない状況となっています。 まずは ・他のテーブルを結合せずに会員情報のみを抽出 問題がなければ ・テーブルを一つ結合して抽出する といったように、一度に解決しようとせず、問題を切り分けながら進めていくのがよいかと思われます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問