2011-09-27 52 views
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 

但是,一個關鍵點要記住的是,根據上下文的子查詢會發生變化。

回答

0

請嘗試添加

OR [email protected]

到您的WHERE子句(在我的測試情況下,這個工程)

+0

這將與子查詢工作,因爲它是在的問題,但就像我說的,這是一個非常簡化的子查詢。子查詢根據情況而有所不同,所以儘管您的答案在給出的示例中有效,但其他時間將無法使用。我需要的是子查詢返回的行數,而不是表中包含的行數。 – intelligentdesigner

+0

然後這將是一個真正的好主意,發佈您的完整聲明 – rabudde

+0

完成 - 這是一個實際的例子。結果數將與子查詢的變化,但它永遠是子查詢的行數,我很感興趣的 – intelligentdesigner