2010-11-20 49 views
0

chère à tous ... je suis familier avec MySQL mais pas avec Firebird.quelle est la même fonction de FOUND_ROWS() dans firebird?

Je veux changer ma page php, de MySQL à Firebird query.But j'ai un peu de difficulté lors de la commande de changement FOUND_ROWS(). Y at-il quelqu'un qui sait quelle est la même fonction de FOUND_ROWS() dans Firebird?

J'ai parcouru tous les sites mais je n'ai pas de réponse. Je suis coincé dans cette affaire. S'il vous plaît aider.

Répondre

1

similaires à @Andrei réponse K..

Réponse à votre question: Il y a pas équivalent dans Firebird pour FOUND_ROWS() fonction MySQL/déclaration. Solution: Si vous souhaitez connaître le nombre de lignes, demandez au moteur d'exécuter une nouvelle requête pour calculer le nombre de lignes présentes pour une version spéciale de la première requête. Pour des requêtes simples, @Andrei K. answer est exacte, mais pour le cas général, y compris les requêtes avec le groupe par et ayant des clauses utiliser une requête comme ceci:

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

Vous devez exclure le premier/saut et de l'ordre par des clauses si elles sont présentes dans cette requête originale. Donc, pour une requête à la recherche ceci:

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; 

la FOUND_ROWS requête équivalente sera:

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 

D'après mon expérience, cela fonctionne pour 99,9% des requêtes.

Avertissement Cette approche est très inefficace, utilisez à vos risques et périls.

-1

Si vous utilisez ce FOUND_ROWS() pour afficher quelque chose comme en indiquant Y lignes sur X lignes, vérifiez si votre nouvelle version de la page peut se passer de cette information. Le chemin avec Firebird, lire la documentation semble être, d'exécuter la requête sans le LIMIT d'abord, puis avec le LIMIT. LIMIT étant MySQL, je ne sais pas comment s'appelle Firebird. Ensuite, il y a le SQL_CALC_ROWS que vous devriez traduire depuis MySQL vers Firebird.

0

Il n'y a aucun moyen de savoir Firebird combien de lignes renverrait requête sans exécuter la requête et récupérer toutes les données ou une requête en cours d'exécution comme ceci:

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