gpt4 book ai didi

php - MySQL Pull All records with join 问题

转载 作者:行者123 更新时间:2023-11-29 05:59:01 25 4
gpt4 key购买 nike

我有一个奇怪的情况。我还没有找到解决方案。我已经尝试使用各种连接和子查询,所以我正在寻求一些帮助。我正在使用 MySQLi 和 PHP 7。

我有两张 table 。一张表(称为表)包含人员列表。另一个表包含此人所做的数据日志,称为报告。

我能够毫无问题地从每个表中清楚地选择所有记录。我可以使用连接语句只提取两个表中的记录

我想要完成的是一个查询,它将提取所有记录,但也会从报告表中加入数据,同时仅显示来自报告的最新加入记录(如果适用)。

工作连接查询的示例:

select * from table 

join reports on (table.ID = reports.ID)
join contacts on (reports.cID = contacts.cID)

where date(reports.dTime) = date(curdate()) and reports.Method = $methodID

修改后的查询不起作用的示例。我了解我可能需要使用子查询,因为我的逻辑存在缺陷并且 OR 无法按照我的预期运行

select * from table 

join reports on (table.ID = reports.ID)
join contacts on (reports.cID = contacts.cID)

where date(reports.dTime) = date(curdate()) and reports.Method = $methodID OR table.Method = $method

我已尝试根据 MySQL 文档使用 LEFT OUTER JOIN,但似乎无法让它包含表中的所有记录和报告中的任何可能数据。

select * from table 

left outer join reports on (table.ID = reports.ID)

where date(reports.dTime) = date(curdate()) and reports.Method = $methodID

我做错了什么吗?还是我对 Join 的理解不够?

感谢您提供的任何帮助。


编辑 - 我刚刚意识到我不可能按报告时间或方法排序或排序,因为这些可能不存在,我不需要在此查询中排序的能力。也许改为按 table.timestamp 排序。


编辑 2 - 添加预期结果示例:

table
-------------------------------------
firstName | last Name | cID | dTime
-------------------------------------
Jane | Doe | 312 | 10:30am
John | Doe | 318 | 10:35am
Adam | Doe | |
Berry | Doe | |
Charlie | Doe | |

表 表包含有关此人的各种数据,如姓名、年龄等。联系人表仅包含联系人 ID (cid) 以及联系人的名字和姓氏。报告表包含 dTime 和该 dTime 的 cid,它对应于联系人表中的 ContactID。联系人 ID 是唯一的。

最佳答案

如果我对数据的理解正确,下面的查询应该能为您提供所需的结果:

SELECT t.firstName, t.lastName, c.id, r.dTime
FROM Table t
LEFT JOIN reports r ON r.id = t.id
LEFT JOIN contacts c ON c.id = r.cId

表格和报告之间的关系似乎没有正确设置,除非您正在简化您的实际结构。正如 Binarus 指出的那样,您应该在 Reports 表中有一个 tId 列来将表 ID 存储为外键。

关于php - MySQL Pull All records with join 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46650492/

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