お世話になります。SuumoやHOME`Sなどでよく見かける不動産ポータルで
千代田区(894) 中央区(332) 港区(979)
新宿区(446) 文京区(112) 台東区(801)
墨田区(468) 江東区(463) 品川区(476)
といったような表示をしたいと考えています。
テーブルは3つあり、構成は以下のような内容です。
■地域テーブル(zip)
zip_no addr1 addr2 addr_no
1 北海道 札幌市中央区 1
2 北海道 札幌市北区 1
3 北海道 札幌市東区 1
4 北海道 札幌市白石区 1
5 北海道 札幌市豊平区 1
6 東京都 千代田区 13
7 東京都 中央区 13
8 東京都 港区 13
9 東京都 新宿区 13
10 東京都 文京区 13
11 東京都 台東区 13
12 東京都 墨田区 13
13 東京都 江東区 13
13 東京都 品川区 13
■物件マスターテーブル(re_master_rent)
master_no master_property_name master_addr1 master_addr2 master_addr3
1 豊島レジデンス 13 豊島区 本町1-7
2 品川マンション 13 品川区 本町4-4
3 中央レジデンス 13 中央区 本町21-15
4 新宿アパート 13 新宿区 本町21-12
5 渋谷マンション 13 渋谷区 本町7
※物件データを格納するテーブルで、集合住宅などで所在地など共通するデータを格納
master_addr1カラムは、zipテーブルのaddr_noカラムと紐づく
■物件詳細テーブル(re_property_data)
data_no data_master_no data_property_name data_price
1 1 310号室 248000
2 1 311号室 148000
3 3 210号室 248000
4 3 211号室 148000
5 3 213号室 248000
6 2 201号室 148000
※集合住宅に紐づく部屋のデータを格納。
物件マスターテーブル(re_master_rent)の master_no と、物件詳細テーブル(re_property_data)の data_master_noが紐づいている。
このような構成となっています。
実現したいことは、zipテーブルの都道府県である13を呼出したとき、同テーブルのaddr2を一覧で表示させ、物件マスターテーブル(re_master_rent)の master_addr1カラムが13であるもの、かつその物件に紐づく各部屋の数を求めたいわけですが、物件マスターテーブル(re_master_rent)と物件詳細テーブル(re_property_data)をJOINさせ、どのようなSQLとなるのか?が分からず質問させて頂きました。
地域テーブル(zip)と物件マスターテーブル(re_master_rent)だけなら以下のようなSQLで出来るまで確認しているのですが、解決に向けご教示いただければ幸いです。
SELECT zip_no, addr2, addr_no, IFNULL(tmp.cnt, 0) AS cnt FROM zip LEFT JOIN (SELECT data_youtube, data_addr2, data_update_plan_date, COUNT(*) AS cnt FROM re_master_rent GROUP BY master_addr2) AS tmp ON zip.addr2 = tmp.master_addr2 WHERE addr_no = '13' ORDER BY zip_no
ちなみに・・・各テーブルは以下のような構成です。(今回の質問に不必要なカラムは省いています)
CREATE TABLE `zip` ( `zip_no` int(11) NOT NULL, `addr1` varchar(255) DEFAULT NULL, `addr2` varchar(255) DEFAULT NULL, `addr_no` int(11) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=''; INSERT INTO `zip` (`zip_no`, `addr1`, `addr2`, `addr_no`) VALUES (1, '北海道', '札幌市中央区', 1), (2, '北海道', '札幌市北区', 1), (3, '北海道', '札幌市東区', 1), (4, '北海道', '札幌市白石区', 1), (5, '北海道', '札幌市豊平区', 1), (6, '東京都', '千代田区', 13), (7, '東京都', '中央区', 13), (8, '東京都', '港区', 13), (9, '東京都', '新宿区', 13), (10, '東京都', '文京区', 13), (11, '東京都', '台東区', 13), (12, '東京都', '墨田区', 13), (13, '東京都', '江東区', 13), (13, '東京都', '品川区', 13); CREATE TABLE `re_master_rent` ( `master_no` int(11) NOT NULL COMMENT '連番', `master_cate_m_no` int(11) NOT NULL COMMENT '物件カテゴリ', `master_addr1` varchar(255) NOT NULL COMMENT '所在地1', `master_addr2` varchar(255) NOT NULL COMMENT '所在地2', `master_addr3` varchar(255) NOT NULL COMMENT '所在地3' ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO `re_master_rent` (`master_no`, `master_property_name`, `master_addr1`, `master_addr2`, `master_addr3`) VALUES (1, '豊島レジデンス', '13', '豊島区', '本町1-7'), (2, '品川マンション', '13', '品川区', '本町4-4'), (3, '中央レジデンス', '13', '中央区', '本町21-15'), (4, '新宿アパート', '13', '新宿区', '本町21-12'), (5, '渋谷マンション', '13', '渋谷区', '本町7'); CREATE TABLE `re_property_data` ( `data_no` int(11) NOT NULL, `data_master_no` int(11) NOT NULL, `data_property_name` varchar(255) NOT NULL, `data_price` int(11) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO `re_property_data` (`data_no`, `data_master_no`, `data_property_name`, `data_price`) VALUES (1, 1, '310号室', '248000'), (2, 1, '311号室', '148000'), (3, 3, '210号室', '248000'), (4, 3, '211号室', '148000'), (5, 3, '213号室', '248000'), (6, 2, '201号室', '148000');
お忙しい中恐縮ですが、ご指導のほどよろしくお願いいたします。
回答3件
あなたの回答
tips
プレビュー