Получить MaxRow Count в MYSQL / Получить FOUND_ROWS и таблицу данных из процедуры с помощью одного вызова - PullRequest
1 голос
/ 03 марта 2011

По мере необходимости для отображения записей в виде сетки на веб-сайте (ASP.NET).и для того же я использую процедуру для возврата данных в .net Net Framework.

Поскольку моя проблема заключается в том, что мне нужен набор таблиц с возвратом мне число ROW (данных) для curr.Page.и мне также нужно общее количество строк для подкачки (для отображения количества страниц).

И для того же, что я написал, следующая процедура, которую я возвращаю

    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 ]

2 голосов
/ 21 марта 2011

Как вы можете сделать динамическую процедуру. который будет просто считать все MaxNo of Row. и вернет то же самое. и может вызывать одно и то же из разных процедур.

2 голосов
/ 23 ноября 2012

Если вы можете использовать несколько запросов, у вас может быть 2 набора результатов в одной и той же процедуре (т.е. добавьте SELECT FOUND_ROWS (); после запроса и используйте LIMIT, чтобы отобразить только одну страницу результатов)

Вот хороший пост о реализации этого в PHP: http://www.robert -gonzalez.com / 2007/06/01 / MySQL-множественного результат-прок-в-PHP /

1 голос
/ 09 марта 2011

мы можем использовать другую ПРОЦЕДУРУ, которая будет вызываться из MainProcedure (скажем, Основная процедура).

let говорит, что MethodCound будет содержать Pr build sql запрос "SELECT COUNT (*)" и примет два параметра (аргумент)

1) будет выходной параметр 2) Из условия, которое генерируется динамически. в основной процедуре.

так что теперь нужно добавить второй аргумент, который содержит условие. Которое мы получили из главной процедуры. и сохранили результат в параметре out, к которому мы можем обратиться обратно в основную процедуру.

...