Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 多个内部连接情况_Php_Mysql_Inner Join - Fatal编程技术网

Php 多个内部连接情况

Php 多个内部连接情况,php,mysql,inner-join,Php,Mysql,Inner Join,我的情况: 表“\u客户” 表“_项目” 多对多表“\u项目\u节” 就我而言,我现在需要所有“活跃”的客户。此外,它们必须来自特定的部分。因此,作为一个例子,我希望所有活跃客户都来自“1”部分。我还找到了获取正确数据的方法,但是——这是一件奇怪的事情——只有当需要id大于1的部分时。如果我试图在第1节中获取所有活动客户,查询仍会显示所有具有第2、3、4节id的项目 质疑 而错误的结果是: Array ( [customer_id] => 1 [name] => customer I

我的情况:

表“\u客户”

表“_项目”

多对多表“\u项目\u节”

就我而言,我现在需要所有“活跃”的客户。此外,它们必须来自特定的部分。因此,作为一个例子,我希望所有活跃客户都来自“1”部分。我还找到了获取正确数据的方法,但是——这是一件奇怪的事情——只有当需要id大于1的部分时。如果我试图在第1节中获取所有活动客户,查询仍会显示所有具有第2、3、4节id的项目

质疑

而错误的结果是:

Array
(
[customer_id] => 1
[name] => customer I
[section_id] => 1
)

也许有人能帮我,因为我不明白。非常感谢你

根据您的描述,查询应该是:

SELECT c.customer_id, c.name, ps.section_id
FROM _customers c
  INNER JOIN _projects p
     ON p.customer_id = c.customer_id 
  INNER JOIN _project_sections ps
    ON ps.section_id = p.project_ID 
  WHERE c.active = 1 AND ps.section_id = 1
GROUP BY c.name
ORDER BY LOWER(c.name)

特定部分的约束在
WHERE
子句中,而不在
JOIN
中。编写此查询不需要GROUP BY子句

首先,让我们看看活跃的客户及其项目

-- All active customers 
SELECT c.customer_id, c.name
FROM customers c
WHERE c.active = 1;

customer_id    name
--
1              customer I

-- All active customers and their projects
SELECT c.customer_id, c.name, p.project_id, p.project_name
FROM customers c
INNER JOIN projects p ON (p.customer_id = c.customer_id)
WHERE c.active = 1;

customer_id  name          project_id  project_name  
--
1            customer I    1           project I
1            customer I    2           project II
-- All projects from section 1
SELECT ps.project_id, ps.section_id
FROM project_sections ps
WHERE ps.section_id = 1;

project_id    section_id
--
2             1

-- All projects from section 1, including project name
SELECT ps.project_id, p.project_name, ps.section_id
FROM project_sections ps
INNER JOIN projects p ON (p.project_id = ps.project_id)
WHERE ps.section_id = 1;

project_id    project_name    section_id
--
2             project II      1
只有一个活跃的客户,他有两个项目

-- All active customers 
SELECT c.customer_id, c.name
FROM customers c
WHERE c.active = 1;

customer_id    name
--
1              customer I

-- All active customers and their projects
SELECT c.customer_id, c.name, p.project_id, p.project_name
FROM customers c
INNER JOIN projects p ON (p.customer_id = c.customer_id)
WHERE c.active = 1;

customer_id  name          project_id  project_name  
--
1            customer I    1           project I
1            customer I    2           project II
-- All projects from section 1
SELECT ps.project_id, ps.section_id
FROM project_sections ps
WHERE ps.section_id = 1;

project_id    section_id
--
2             1

-- All projects from section 1, including project name
SELECT ps.project_id, p.project_name, ps.section_id
FROM project_sections ps
INNER JOIN projects p ON (p.project_id = ps.project_id)
WHERE ps.section_id = 1;

project_id    project_name    section_id
--
2             project II      1
现在让我们看看第1节的项目

-- All active customers 
SELECT c.customer_id, c.name
FROM customers c
WHERE c.active = 1;

customer_id    name
--
1              customer I

-- All active customers and their projects
SELECT c.customer_id, c.name, p.project_id, p.project_name
FROM customers c
INNER JOIN projects p ON (p.customer_id = c.customer_id)
WHERE c.active = 1;

customer_id  name          project_id  project_name  
--
1            customer I    1           project I
1            customer I    2           project II
-- All projects from section 1
SELECT ps.project_id, ps.section_id
FROM project_sections ps
WHERE ps.section_id = 1;

project_id    section_id
--
2             1

-- All projects from section 1, including project name
SELECT ps.project_id, p.project_name, ps.section_id
FROM project_sections ps
INNER JOIN projects p ON (p.project_id = ps.project_id)
WHERE ps.section_id = 1;

project_id    project_name    section_id
--
2             project II      1
只有一个第1部分的项目。现在把这些碎片放在一起

-- All active customers and their projects from section 1
SELECT c.customer_id, c.name, p.project_id, p.project_name, ps.section_id
FROM customers c
INNER JOIN projects p ON (p.customer_id = c.customer_id)
INNER JOIN project_sections ps ON (p.project_id = ps.project_id)
WHERE c.active = 1 AND ps.section_id = 1;

customer_id  name          project_id    project_name    section_id
-- 
1            customer I    2             project II      1
这就是我所期望的

稍后


我看到你改变了数据。如果我在这里做了相同的更改,那么上面的最后一个查询不会返回任何行。我想这就是你所说的你所期待的。(而且,随着您对数据的更改,这也是我所期望的。)

对于您显示的数据,该结果是否正确?第1部分只有一个项目,而该项目只有一个客户:客户I。事实上,您的两个项目都只有一个客户,客户I,所以无论您指定哪个部分,您都会将该客户取回。很抱歉,您的回答完全正确,我已更正。因此,在上面的例子中,结果应该是空的。但不幸的是,事实并非如此。非常感谢。谢谢你,我更新了查询,不幸的是仍然有相同的错误结果。@user707907正如nnnnnn已经说过的,结果似乎适合查询。。。不是吗?只有一个活跃的客户也在第1部分。嘿,夸斯邓克,非常感谢你的帮助。是的,没错。我已经纠正了,问题仍然存在。