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