Précédent   Forum des professionnels en informatique > Bases de données > Firebird > SQL
SQL Forum d'entraide sur le SQL pour Firebird
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/09/2004, 11h03   #1
GMI
Invité de passage
 
Inscription : novembre 2002
Messages : 13
Détails du profil
Informations forums :
Inscription : novembre 2002
Messages : 13
Points : 0
Points : 0
Par défaut nb ligne résultat

Bonjour à tous,

Je bosse actuellement avec php4 et interbase 6.0 et j'ai un probleme avec le fait qu'il n'y a pas de fonction pour connaitre le nombre de ligne résultat d'une requete en php

j'ai donc écrit ma propre fonction:

Code :
1
2
3
4
5
6
7
8
9
 
FUNCTION ibase_num_rows($query) { 
   $result = BDSQL($query);
   $i = 0;
   while (ibase_fetch_row($result)) {
      $i++;
   }
   RETURN $i;
}
cette fonction marche nikel pour des petites tables... malheuresement pour moi je travail avec des tables atteignant 15000 enregistrements.
dans ce cas ma fonction devient beaucoup trop lente (et oui elle fait explosé les 30 secondes...)

donc je me suis dis utilise lafonction sql COUNT(*) sur ta requete sa doit etre plus rapide... mais je viens de découvrir qu'on ne peut pas faire de SELECT dans un FROM avec interbase

je ne vois pas de solutions "rapide" pour mon probléme? quelqu'un a t'il une solution?
merci d'avance
GMI est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/09/2004, 14h44   #2
Membre du Club
 
Inscription : mai 2003
Messages : 140
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 140
Points : 66
Points : 66
as tu essayé cette requete ?
Code :
SELECT  COUNT(*) FROM TaTable
Sitting Bull est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/09/2004, 15h05   #3
GMI
Invité de passage
 
Inscription : novembre 2002
Messages : 13
Détails du profil
Informations forums :
Inscription : novembre 2002
Messages : 13
Points : 0
Points : 0
Citation:
SELECT COUNT(*) FROM TaTable
merci...

mais comme je l'ai dis dans mon message (enfin je crois) je ne veux pas simplement compter le nombre d'enregistrement sur une table (autrement je pense que j'y aurais déjà pensé...) mais je veux compter le nombre de résultat pour une requete SQL donc un truc du genre :

SELECT COUNT(*) FROM MA_REQUETE


mais interbase ne permet pas de mettre de select dans la clause where. j'ai aussi essayé de mettre un "count(nom_d'un_champ_selectionné)" dans la requete mais g une erreur sql:

exmple de requete:
"SELECT COUNT(*), tab1.champ1, tab1.champ2, tab1.champ3,..., tab2.champ1, tab2.champ2,... FROM tab1,tab2 WHERE tab1.champ1=tab2.champ1 ORDER BY tab1.champ3"

erreur:
Dynamic SQL Error SQL error code = -104 invalid column reference


voila j'espere avoir été un peu plus clair...
GMI est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2004, 12h23   #4
Membre Expert
 
Avatar de Barbibulle
 
Frédéric
Inscription : octobre 2002
Messages : 1 722
Détails du profil
Informations personnelles :
Nom : Frédéric
Âge : 42

Informations forums :
Inscription : octobre 2002
Messages : 1 722
Points : 2 025
Points : 2 025
Si vous avez une requete

Code :
SELECT Col1, Col2, Col3 FROM MaTable WHERE Col3='Toto' AND Col6>1000 AND... etc...;
Pour connaitre le nombre de ligne résultat sans devoir rapatrier toutes les données de cette requete il faut en effet faire un count.

Mais on ne peux pas faire de sous-requete dans la clause FROM. Pres un from on ne peux mettre que des tables, des procédures stoquées et des vues.

La solution la plus simple (il y en a d'autres en utilisant des PS ou en une requete plus complexe etc...) consiste à exécuter la requete suivante :
Code :
SELECT Count(*) FROM MaTable WHERE Col3='Toto' AND Col6>1000 AND... etc...;
Donc il suffit de remplacer la partie entre le SELECT et le FROM :"Col1, Col2, Col3" par le count(*).

Après il ne vous reste qu'à exécuter la requete pour récupérer les données.
Barbibulle est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h35.


 
 
 
 
Partenaires

Hébergement Web