Mysql - 三表查询

标签 mysql

我有三个表,用于存储一些用户数据。

sub_domains (体验子域转到此处。exp_idid 中的 exp 匹配,domain_idid 中的 misc 匹配。因此,如果用户拥有多个子域,则 user_idexp_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/

相关文章:

MySQL SUM 具有相同 ID 的单元格并将其插入表中

mysql - 如何将字符串添加到 MySQL 中的字段值?

php - 求解关联数组中 SQL 查询的返回值

mysql - 在 MYSQL 中使用 IN 运算符选择记录的最佳方法

php - SQL - 组织多个发布/记录类型的最有效方法

php - 表单提交后生成引用ID

mysql - ADO .NET 源的 SSIS 查询参数

MySQL插入数据时报错1452

php - 将简单列表服务器端/差异存储到本地存储

android - 无法将位置从一项 Activity 返回到另一项 Activity