通过单次调用获取MYSQL中的MaxRow计数/从过程中获取FOUND_ROWS和数据表

时间:2011-03-03 07:18:39

标签: asp.net mysql sql procedure

需要在(ASP.NET)网站的网格视图中显示记录。对于同样的我使用过程将数据返回到.net Net Framework。

因为我的问题是我需要使用表格设置返回我对于curr的ROW(数据)的数量。页。我还需要总行数来进行分页(显示没有页面)。

对于我写的以下是我已经返回的程序

    CREATE PROCEDURE usp_SearchEmp(IN _RowIndex int, IN _MaxRows int , IN _SortByCol  varchar(40),IN _EmployeeID int)
 DECLARE _getLastSequenceNumberSQL VARCHAR(4000);
set _getLastSequenceNumberSQL ='
    SELECT SQL_CALC_FOUND_ROWS 
    @rownum:=@rownum+1 ROW,
        E.EmployeeID,
        E.EmployeeName  
    from
    (SELECT @rownum:=0) r, Employee E ;
        IF (_EmployeeID IS NOT NULL) THEN
              set _getLastSequenceNumberSQL = concat(_getLastSequenceNumberSQL,' WHERE (E.EmployeeID=',_EmployeeID,')');
        END IF;

        IF (_SortByCol IS NOT NULL) AND (_SortByCol != "") THEN
              set @SortCol = concat(' ORDER BY ', _SortByCol) ;
        ELSE
               set @SortCol = 'ORDER BY EmployeeName';
        END IF;

      set _getLastSequenceNumberSQL = concat(_getLastSequenceNumberSQL, @SortCol , ' LIMIT ',  _RowIndex, ' , ' , _MaxRows,' ');

 SET @getLastSequenceNumberSQL = _getLastSequenceNumberSQL;

  prepare lastRecordStmt from @getLastSequenceNumberSQL;
  execute lastRecordStmt;
  deallocate prepare lastRecordStmt;

    select FOUND_ROWS() as i;

但现在的问题是,当我从.net调用此过程时,它只返回Found_Rows的结果..

 I need out put . some thing like the following 

喜欢: -

SELECT 64 AS `ROWMAX`, E.EmployeeID, E.EmployeeName FROM Employee E order by EmployeeID LIMIT 0 , 4

|--------------------------------------------------------------|

| ROWMAX  | EmployeeID | EmployeeName                          |

|--------------------------------------------------------------|

|  64     |    1       | Emp One                               |

|  64     |    2       | Emp Two                               |

|  64     |    3       | Emp Three                             |

|  64     |    4       | Emp Four                              |

----------------------------------------------------------------

因为我可以使用ROWMAX列来确定网格视图中的页数。

所以请指导我一样。因为我是MYSQL的新手

3 个答案:

答案 0 :(得分:2)

您可以制作动态过程。这将只计算所有MaxNo of Row。并将返回相同。并且可以从不同的程序中调用相同的程序。

答案 1 :(得分:2)

如果你可以使用多个查询,你可以在同一个程序中有2个结果集(即添加一个SELECT FOUND_ROWS();在查询后使用LIMIT只显示一个页面结果)

这是一篇关于在PHP中实现它的好文章: http://www.robert-gonzalez.com/2007/06/01/mysql-multiple-result-procs-in-php/

答案 2 :(得分:1)

我们可以使用其他PROCEDURE来自MainProcedure(请说主程序)。

让ProcedureCound说它将包含Pr build sql查询“SELECT COUNT(*)” 并将接受两个参数(参数)

1)将参数输出 2)将从动态生成的条件开始。在主要程序中。

所以现在需要附加第二个参数,其中包含我们从Main Procedure获得的condition.which .. 并将结果存储到out参数中,我们可以将其访问回Main Procedure。