Какова же функция FOUND_ROWS () в Firebird? - PullRequest
0 голосов
/ 20 ноября 2010

дорогие все ... я знаком с MySQL, но не знаком с Firebird.

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

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

Ответы [ 3 ]

1 голос
/ 20 ноября 2010

Аналогично ответу @Andrei K.

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

Обходной путь : Если вы смертельно хотите узнать это количество строк, попросите движок запустить новый запрос, чтобы вычислить количество строк, представленных для специальной версии первого запроса.Для простых запросов @ Андрей К. ответ является точным, но для общего случая, включая запросы с группировкой и предложениями, используйте запрос, подобный следующему:

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% запросов.

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

0 голосов
/ 20 ноября 2010

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

SELECT COUNT(*) FROM <your tables and conditions go here>
0 голосов
/ 20 ноября 2010

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

...