我遇到了一种情况,我有一个存储表的ID列表,需要从每个存储中获取最新的10个文件。
SELECT *
FROM tblFiles
WHERE storeId in (IDs)
ORDER BY createdDate DESC
LIMIT 10
但是,这限制了整个结果。我找到了一个类似问题的答案。但是,答案建议对每个id使用loop,这会导致多个db命中。
另一种选择是获取所有记录并在代码中对它们进行分组。但是,如果有大量的记录,这将是沉重的。
如果可以在查询级别处理,那就太好了。任何帮助都将不胜感激。
注:这里用的是假表。
3条答案
按热度按时间svmlkihl1#
在where中使用select
zpqajqem2#
在mysql 8.0之前,最简单的方法可能是变量:
在mysql 8+或mariadb 10.3+中,您只需使用窗口函数:
在mysql和mariadb的旧版本中,可能不需要最里面的子查询。
w46czmvw3#
您可以使用联合查询来解决此问题,其中每个子查询搜索特定的id并强制执行一个限制子句,如:
使用此解决方案,只会发生一次db命中,并且您可以保证在每个id的基础上获得限制。这样的sql可以很容易地从php代码中生成。
注意:mysql查询中允许的最大联合数是61。