php - 无论如何,他们是否要向使用 group by 返回特定列的最新行的查询添加连接
问题描述
"SELECT * FROM report
where id
IN (
SELECT MAX(id)
FROM report
where org_id = '$id'
GROUP BY request_i
) ";
上面的代码为我提供了每个组织的每个 request_id 的最新行,这正是我想要的,但我需要使用表中的 FK 来获取更多详细信息。我想将组织和请求表加入到上述查询中,以便我可以使用 FK 在我的报告页面上显示某些内容。
我以不同的方式尝试了下面的代码,但我总是得到这个错误。
警告:mysqli_fetch_assoc() 期望参数 1 为 mysqli_result,布尔值在 C:\xampp\htdocs\mou1\organizationDetails.php 第 503 行给出
"SELECT * FROM report
JOIN request ON
report.id = report.request_id
JOIN organization ON
organization.id = report.org_id
where id
IN (
SELECT MAX(id)
FROM report
where org_id = '$id'
GROUP BY request_i
) ";
解决方案
据推测,您的查询失败是因为子句id
中的歧义。WHERE
您需要限定此列名:
SELECT *
FROM report
JOIN request ON request.id = report.request_id
JOIN organization ON organization.id = report.org_id
WHERE report.id IN (
SELECT MAX(id)
FROM report
where org_id = '$id'
GROUP BY request_id
)
request
我修复了(你有ON report.id = report.request_id
)连接条件中看起来像是错字的地方。
我会向前迈出一步,建议重写此查询并使用相关子查询。MySQL 倾向于IN
使用子查询对过滤器进行不良优化,而如果有适当的索引可用,相关子查询通常会表现得非常好:
select * -- you should enumerate the columns here
from report rep
inner join request req on req.id = rep.request_id
inner join organization org on org.id = rep.org_id
where rep.id = (
select max(rep1.id)
from report rep1
where rep1.org_id = ? and rep1.request_id = rep.request_id
)
请注意,我使用表别名来使查询更具可读性并缩短它。您还应该使用参数化查询,而不是在查询字符串中连接变量(?
此处代表查询参数)。
对于此查询的性能,您需要在report(org_id, requsst_id, id)
.
推荐阅读
- linux - 'find' 找不到文件,可能是什么原因?
- python - 在 Keras 训练期间,tf.py_func 和 sklearn 的 AUC 不同
- supervisord - 是否可以为每个用户(目录)单独使用不同的主管(配置)?
- javascript - 是否可以构建独立的 Vue 应用程序?
- laravel - Laravel(将数据下载到数据库)
- c++11 - tensorflow c ++错误:类型名称的一元VariantShapeFn:int已经注册
- html - 我怎样才能使这个字体更小而不弄乱它的效果
- ansible - 如何解析ansible的输出
- command-line - 使用设备树时将内核参数从 U-Boot 传递到 ARM Linux
- python - 允许用户直接下载文件 django