ユーザーデータを保存するために使用される3つのテーブルがあります。
sub_domains
(エクスペリエンスのサブドメインはここに移動します。exp_id
一致id
するexp
と にdomain_id
一致id
しmisc
ます。したがって、ユーザーが複数のサブドメインを持っている場合、user_id
とが重複する可能性があります)exp_id
+-----------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+---------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| user_id | int(50) | YES | | NULL | |
| domain_id | int(10) | NO | | NULL | |
| exp_id | int(50) | YES | | NULL | |
+-----------+---------+------+-----+---------+----------------+
misc
+----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(100) | YES | | NULL | |
| category | varchar(255) | YES | | NULL | |
+----------+--------------+------+-----+---------+----------------+
exp
+------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| user_id | int(11) | YES | | NULL | |
| job_type | varchar(60) | YES | | NULL | |
| experience | varchar(500) | YES | | NULL | |
| exp_title | varchar(255) | YES | | NULL | |
| domain | varchar(125) | YES | | NULL | |
| start | varchar(20) | YES | | NULL | |
| end | varchar(20) | YES | | NULL | |
+------------+--------------+------+-----+---------+----------------+
これは、exp からデータを取得する atm のクエリです。
$query_str = "SELECT a.id, a.user_id, a.job_type, a.experience, a.exp_title, a.domain, a.start, a.end, b.name
FROM exp a
JOIN misc b ON a.domain=b.id
WHERE a.user_id = ?";
既にドメイン名をmisc
取得していますが、各サブドメインの名前も取得したいのですがmisc
、クエリを変更する方法がわかりません。
編集
私はこれに少し取り組み、これを思いつきました:
$query_str = "SELECT a.id, a.user_id, a.job_type, a.experience, a.exp_title, a.domain, a.start, a.end, b.name,
(SELECT GROUP_CONCAT(domain_id) FROM sub_domains sd WHERE a.id=sd.exp_id) AS subs,
(SELECT GROUP_CONCAT(name) FROM misc WHERE id IN( subs ) ) AS subcats
FROM exp a
JOIN misc b ON a.domain=b.id
WHERE a.user_id = ?";
それはほとんど機能します。subcats の var_dump はテーブルname
から最初のものだけを返しmisc
ます。