2
我用下面的MySQL查询创建一个分页阵列从一个MySQL子查询返回的最后一行 - 用于文档的列表 - 形式“的Ab-CF | CG乐| Li-Ru“等...分页时的结果集合
子查询'子查询'选择文档的整个列表,并且根据用户权限,需求等而变化 - 所以我试图避免改变查询的那部分(并且在这里使用了简化的版本)。
那么我选择每一页范围的第一个和最后一排 - 即,第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
但是,一个关键点要记住的是,根据上下文的子查询会发生变化。
这将与子查询工作,因为它是在的问题,但就像我说的,这是一个非常简化的子查询。子查询根据情况而有所不同,所以尽管您的答案在给出的示例中有效,但其他时间将无法使用。我需要的是子查询返回的行数,而不是表中包含的行数。 – intelligentdesigner
然后这将是一个真正的好主意,发布您的完整声明 – rabudde
完成 - 这是一个实际的例子。结果数将与子查询的变化,但它永远是子查询的行数,我很感兴趣的 – intelligentdesigner