我有三个表,用于存储一些用户数据。
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 | |
+------------+--------------+------+-----+---------+----------------+
这是我在 atm 上从 exp 获取数据的查询:
$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 = ?";
它几乎可以工作,子猫的 var_dump 只返回第一个 name
来自 misc
表。
最佳答案
这应该有效:
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
INNER JOIN misc b
ON a.domain=b.id
INNER JOIN sub_domains c
ON a.id=c.exp_id
WHERE a.user_id = ?
关于Mysql - 三表查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11632528/