gpt4 book ai didi

mysql - 对结果集进行分页时从 mysql 子查询返回最后一行

转载 作者:搜寻专家 更新时间:2023-10-30 21:36:27 25 4
gpt4 key购买 nike

我正在使用以下 mysql 查询创建一个分页数组——用于文档列表——格式为“Ab-Cf | Cg-Le | Li-Ru”等...

子查询“Subquery”选择整个文档列表,并且根据用户权限、要求等而变化——所以我试图避免改变查询的那部分(并在这里使用了简化版本) .

然后我选择每个页面范围的第一行和最后一行——即第 1 行和第 10 行、第 11 行和第 20 行等,由 $num_rows_per_page 确定。

SELECT * FROM 
(
SELECT @row := @row + 1 AS `rownum`, `sort_field` FROM
(
SELECT @row := 0 ) r, (
SELECT D.`id`, D.`display_name` as display_field,
D.`sort_name` as sort_field
FROM Document D ORDER BY `sort_field` ASC
) Subquery
) Sorted
WHERE rownum % $num_rows_per_page = 1 OR rownum % $num_rows_per_page = 0

这工作得很好,并给我一个结果集:

+---------+-----------------------------------+
| rownum | index_field |
+---------+-----------------------------------+
| 1 | Alternaria humicola |
| 10 | Anoplophora chinensis |
| 11 | Atherigona soccata |
| 20 | Carlavirus RCVMV |
| 21 | Cephus pygmaeus |
| 30 | Colletotrichum truncatum |
| 31 | Fusarium oxysporium f. sp. ciceri |
| 40 | Homalodisca vitripennis |
| 41 | Hordevirus BSMV |
| 50 | Mayetiola hordei |
| 51 | Meromyza saltatrix |
| 60 | Phyllophaga |
| 61 | Pyrenophora teres |
+--------+------------------------------------+

但是——我一辈子都弄不明白如何在结果集中包含子查询的最后行。即,rownum 为 67(或其他)的行不符合 WHERE 子句的条件。

我希望以某种方式提取 rownum 的最大值并将其添加到 WHERE 子句中,但我并不高兴。

有什么想法吗?

如果不清楚,很乐意尝试改写!

编辑——这是一个更合适的子查询版本:

SELECT * FROM 
(
SELECT @row := @row + 1 AS `rownum`, `sort_field` FROM
(
SELECT @row := 0 ) r,
(
SELECT D.`id`, D.`display_name` as display_field,
D.`sort_name` as sort_field
FROM Document D INNER JOIN
(
SELECT DS.* FROM Document_Status DS INNER JOIN
(
SELECT `document_id`, max(`datetime`) as `MaxDateTime`
FROM Document_Status GROUP BY `document_id`
)
GS ON DS.`document_id` = GS.`document_id`
AND DS.`datetime` = GS.`MaxDateTime`
AND DS.`status` = 'approved' INNER JOIN
(
SELECT `id` FROM Document WHERE `template_id`= 2 ) GD
ON DS.`document_id` = GD.`id`
)
AG ON D.id = AG.document_id ORDER BY `sort_field` ASC
) Subquery
) Sorted
WHERE rownum % $num_rows_per_page = 1 OR rownum % $num_rows_per_page = 0

但是,要记住的一个关键点是子查询会根据上下文发生变化。

最佳答案

请尝试添加

或 rownum=@row

到你的 WHERE 子句(在我的测试用例中这是有效的)

关于mysql - 对结果集进行分页时从 mysql 子查询返回最后一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7563444/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com