gpt4 book ai didi

php - CI MySQL 查询连接表和 where 语句不返回所有行

转载 作者:可可西里 更新时间:2023-11-01 08:03:23 26 4
gpt4 key购买 nike

我有 3 个表要连接,但是当我在第三个表上使用 where 语句时,第三个表没有它,它不会返回第一个和第二个表中的行,即使我' m 使用左连接。

Table 1
+---------+--------------+----------+
| acc_PID | acc_name | acc_type |
+---------+--------------+----------+
| 1 | Account 1 | 1 |
| 2 | Account 2 | 1 |
| 3 | Account 3 | 2 |
| 4 | Account 4 | 1 |
+---------+--------------+----------+

Table 2
+-------------+-----------------+-----------+
| journal_PID | journal_account | trans_PID |
+-------------+-----------------+-----------+
| 1 | 1 | 1 |
| 2 | 2 | 2 |
| 3 | 1 | 3 |
+-------------+-----------------+-----------+

Table 3
+-----------+----------------+
| trans_PID | trans_location |
+-----------+----------------+
| 1 | 1 |
| 2 | 1 |
| 3 | 2 |
+-----------+----------------+

// CI query
$this->db->join('table_2 b', 'a.acc_PID = b.journal_account', 'LEFT');
$this->db->join('table_3 c', 'b.trans_PID = c.trans_PID', 'LEFT');
$this->db->where('a.acc_type', '1');
$this->db->where('c.trans_location', '1');
$this->db->group_by('a.acc_PID');
$query = $this->db->get('table_1 a');
$result = $query->result();

现在从上面的数据来看,如果我使用($this->db->where('c.trans_location', '1')),结果不会返回帐户4,因为没有acc_PID = table_2 和 table_3 中的“4”,但是我希望结果也返回帐户 4,即使表 2 和表 3 中没有帐户 4 的数据,没有 $this->db->where('c.trans_location', '1'),结果也显示帐户 4,但是使用 where location 语句它不会返回表 1 的行,即使我使用左连接,它不应该也返回表 1 的结果吗?

提前谢谢你。

最佳答案

尝试在 Join 中添加条件,而不是在 where 子句上。如果你在 where 子句中写条件,它会在 join 之后添加条件意味着 filter after filter,

或者不使用 Left join,最后加上 where 条件。

还有一件事我没有发现表 1 与 tanle 2 或表 3 有任何关系。如果 journal_account 与表 1 有关系,那么它应该有效。

我自己试了一下,这是我认为的解决方案:

SELECT * FROM `table1`

INNER JOIN table2 ON table2.journal_account = table1.acc_PID

INNER JOIN table3 ON table3.trans_PID = table2.trans_PID

WHERE table1.acc_type = 1 AND table3.trans_location = 1 GROUP BY table1.acc_PID

还有这个:

SELECT * FROM `table1`

INNER JOIN table2 ON table2.journal_account = table1.acc_PID

INNER JOIN table3 ON table3.trans_PID = table2.trans_PID AND table3.trans_location = 1

WHERE table1.acc_type = 1 GROUP BY table1.acc_PID

这将给我两个帐户 Account1 和 Account 2

希望对您有所帮助。

关于php - CI MySQL 查询连接表和 where 语句不返回所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43337942/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com