"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,在503行的C:\ xampp \ htdocs \ mou1 \ organizationDetails.php中给出的布尔值
"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)
上建立索引。