2010-11-20 2 views
0

дорогой все ... я знаком с MySQL, но не с Firebird.Что такое функция FOUND_ROWS() в firebird?

Я хочу изменить свою страницу php, от MySQL до запроса Firebird. Но я немного затруднился во время команды изменения FOUND_ROWS(). есть кто-то, кто знает, что такое функция FOUND_ROWS() в Firebird?

Я просмотрел на всех сайтах, но у меня нет ответа. Я застрял в этом случае. Помогите.

ответ

1

Подобно @Andrei К. ответа.

Ответ на ваш вопрос: Там в не эквивалент в Firebird для FOUND_ROWS() функция MySQL/заявление.

Временное решение: Если вы хотите узнать это количество строк, попросите двигатель запустить новый запрос, чтобы вычислить количество строк, присутствующих для специальной версии первого запроса. Для простых запросов, @Andrei K. answer является точным, но в общем случае, в том числе запросов с группой по и имеющим пунктам использовать запрос следующим образом:

select count(*) 
    from (your original query here) q1; 

Вы должны исключить первый/пропустить и порядок пунктов если они присутствуют в этот оригинальный запрос. Таким образом, для запроса ищет это:

select first 10 skip 20 pd.productcode, extract(year from ph.purchasedate) year, sum(pd.quantity) year_quantity 
    from purchase_details pd 
     inner join purchase_header ph 
      on ph.id = pd.purchase_id 
where ph.cancelled = 0 
    and ph.salesman = 10 
group by pd.productcode, extract(year from ph.purchasedate) 
having sum(pd.quantity) > 1000 
order by sum(pd.quantity) desc; 

в FOUND_ROWS эквивалентный запрос будет:

select count(*) 
    from (
     select pd.productcode, extract(year from ph.purchasedate) year, sum(pd.quantity) year_quantity 
      from purchase_details pd 
       inner join purchase_header ph 
        on ph.id = pd.purchase_id 
     where ph.cancelled = 0 
      and ph.salesman = 10 
     group by pd.productcode, extract(year from ph.purchasedate) 
     having sum(pd.quantity) > 1000 
     ) q1 

Из моего опыта, это работает на 99,9% запросов.

Предупреждение Этот подход очень неэффективен, используйте его на свой страх и риск.

-1

Если вы используете это FOUND_ROWS(), чтобы показать что-то вроде , показывающее Y строк из X строк, посмотрите, может ли ваша новая версия страницы обойтись без этой информации. Как и в случае с Firebird, чтение документации выглядит таким, чтобы сначала выполнить запрос без LIMIT, а затем с LIMIT. LIMIT является MySQL, не уверен, что он называется в Firebird. Тогда есть SQL_CALC_ROWS, который вы должны перевести с MySQL на Firebird.

0

Там нет никакого способа в Firebird, чтобы узнать, сколько строк будет возвращать запрос без выполнения запроса и получения всех данных или запуска запроса, как это:

SELECT COUNT(*) FROM <your tables and conditions go here>