php—他们的方法是向查询添加一个连接,该查询使用GROUPBY返回特定列的最新行

hi3rlvi2  于 2021-08-13  发布在  Java
关注(0)|答案(1)|浏览(339)
  1. "SELECT * FROM report
  2. where id
  3. IN (
  4. SELECT MAX(id)
  5. FROM report
  6. where org_id = '$id'
  7. GROUP BY request_i
  8. ) ";

上面的代码为我提供了每个组织每个请求的最新一行id,这正是我想要的,但是我需要使用表中的fk来获得更多细节。我想将一个organization&request表加入到上面的查询中,这样我就可以使用fk在我的报表页上显示某些内容。
我尝试了下面的代码在不同的方式,但我总是得到这个错误。
警告:mysqli\u fetch\u assoc()期望参数1是mysqli\u result,bool在c:\xampp\htdocs\mou1\organizationdetails.php的第503行中给出

  1. "SELECT * FROM report
  2. JOIN request ON
  3. report.id = report.request_id
  4. JOIN organization ON
  5. organization.id = report.org_id
  6. where id
  7. IN (
  8. SELECT MAX(id)
  9. FROM report
  10. where org_id = '$id'
  11. GROUP BY request_i
  12. ) ";

代码段

8ljdwjyq

8ljdwjyq1#

您的查询可能会失败,因为 id 是模棱两可的 WHERE 条款。您需要限定此列名:

  1. SELECT *
  2. FROM report
  3. JOIN request ON request.id = report.request_id
  4. JOIN organization ON organization.id = report.org_id
  5. WHERE report.id IN (
  6. SELECT MAX(id)
  7. FROM report
  8. where org_id = '$id'
  9. GROUP BY request_id
  10. )

我修复了连接条件中的一个拼写错误 request (你有 ON report.id = report.request_id ).
我会向前迈出一步,建议重写这个查询并使用相关的子查询。mysql的优化往往很差 IN 带有子查询的flter,而如果有合适的索引可用,则相关的子查询通常表现得非常好:

  1. select * -- you should enumerate the columns here
  2. from report rep
  3. inner join request req on req.id = rep.request_id
  4. inner join organization org on org.id = rep.org_id
  5. where rep.id = (
  6. select max(rep1.id)
  7. from report rep1
  8. where rep1.org_id = ? and rep1.request_id = rep.request_id
  9. )

请注意,我使用了表别名来提高查询的可读性并缩短它。您还应该使用参数化查询,而不是在查询字符串中串联变量 ? 此处表示查询参数)。
为了提高此查询的性能,您需要在 report(org_id, requsst_id, id) .

展开查看全部

相关问题