【发布时间】:2017-10-09 15:56:26
【问题描述】:
我的情况很奇怪。我还没有找到解决方案。我尝试过使用各种连接和子查询,所以我需要一点帮助。我正在使用 MySQLi 和 PHP 7。
我有两张桌子。一个表(称为表)包含人员列表。另一个表包含该人所做的数据日志,称为报告。
我可以毫无问题地从每个表中直接选择所有记录。 我可以使用连接语句仅提取两个表中的记录
我想要完成的是一个查询,它将提取所有记录,但也连接报告表中的数据,同时仅显示报告中最新连接的记录(如果适用)。
工作连接查询示例:
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
我做错了什么吗?还是我对 Joins 的掌握不足?
感谢您提供的任何帮助。
编辑 - 我刚刚意识到我不可能按报告时间或方法排序或排序,因为这些可能不存在,我不需要在此查询中排序的能力。也许按 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 | |
表格 Table 包含有关人员的各种数据,例如姓名、年龄等。contacts 表仅包含联系人 ID (cid) 以及联系人的名字和姓氏。报告表包含 dTime 和该 dTime 的 cid,该 cid 对应于联系人表中的 ContactID。联系人 ID 是唯一的。
【问题讨论】:
-
目前还不清楚您要达到的目标。如果您可以添加一些示例数据和预期结果,那将很有帮助。听起来您需要 LEFT JOIN,它将为您提供所有表行,以及连接表中的任何可用信息
-
我会这样做 - 现在编辑
-
@i-man 我已按要求编辑了问题
-
table是MySQL中的保留字dev.mysql.com/doc/refman/5.5/en/keywords.html -
我使用表格作为占位符 - 抱歉。那不是我真正的表名。真正的表名。