Mysql num rows, avec un UNION ?

Résolu/Fermé
ZeGroumf Messages postés 17 Date d'inscription samedi 13 février 2010 Statut Membre Dernière intervention 2 avril 2010 - 3 mars 2010 à 12:22
ZeGroumf Messages postés 17 Date d'inscription samedi 13 février 2010 Statut Membre Dernière intervention 2 avril 2010 - 3 mars 2010 à 20:07
Bonjour,

alors, j'ai la structure suivante :


$connexion = mysql_connect($sql_serveur, $sql_user, $sql_passwd);
mysql_select_db($sql_bdd, $connexion);


if ($MASTER==1)
{ $compt = "SELECT COUNT(id_dossier) FROM $t_dossier WHERE etude!=1 AND point_arret!=1 AND dossier_annule!=1 AND devis !=1"; }
if ($MASTER==2)
{ $compt = "SELECT COUNT(id_dossier) FROM $t_dossier WHERE etude=1 AND point_arret!=1 AND dossier_annule!=1 AND devis !=1"; }
if ($MASTER==3)
{ $compt = "SELECT COUNT(id_dossier) FROM $t_dossier WHERE point_arret!=1 AND dossier_annule!=1 AND devis !=1"; }
if ($VOIRARRET==1)
{
$compt .= " UNION ";
$compt .= "SELECT COUNT(id_dossier) FROM $t_dossier WHERE point_arret=1";
}
if ($VOIRANNULE==1)
{
$compt .= " UNION ";
$compt .= "SELECT COUNT(id_dossier) FROM $t_dossier WHERE dossier_annule=1";
}
if ($VOIRDEVIS==1)
{
$compt .= " UNION ";
$compt .= "SELECT COUNT(id_dossier) FROM $t_dossier WHERE devis=1";
}
$result = mysql_query("$compt", $connexion);
$nbr = mysql_num_rows($result); <-------------- LE SOUCI EST ICI :p
$result = mysql_close($connexion);
if($nbr == 0) { $nbr = 1; }


// --------------------------
// calcul du nombre de pages en fonction du nombre total de dossiers et du nombre de dossiers par page (arrondi à l'entier supérieur)
// --------------------------

$nbpages = ceil($nbr / $NBPAGES);

// --------------------------
// écriture de l'option LIMIT
// --------------------------

$limit = "LIMIT ".(($page-1) * $NBPAGES).",$NBPAGES";
$connexion = mysql_connect($sql_serveur, $sql_user, $sql_passwd);
$select = mysql_select_db($sql_bdd);
if ($MASTER==1)
{ $req = "SELECT id_dossier,date_reception,aff_perrion_dossier,aff_client,entreprise,piqueteur,etude,commune,lieu,prepare_par,devis,reclame_le,point_arret,dossier_annule,id_facture FROM $t_dossier WHERE etude!=1 AND point_arret!=1 AND dossier_annule!=1 AND devis !=1"; }
if ($MASTER==2)
{ $req = "SELECT id_dossier,date_reception,aff_perrion_dossier,aff_client,entreprise,piqueteur,etude,commune,lieu,prepare_par,devis,reclame_le,point_arret,dossier_annule,id_facture FROM $t_dossier WHERE etude=1 AND point_arret!=1 AND dossier_annule!=1 AND devis !=1"; }
if ($MASTER==3)
{ $req = "SELECT id_dossier,date_reception,aff_perrion_dossier,aff_client,entreprise,piqueteur,etude,commune,lieu,prepare_par,devis,reclame_le,point_arret,dossier_annule,id_facture FROM $t_dossier WHERE point_arret!=1 AND dossier_annule!=1 AND devis !=1"; }
if ($VOIRARRET==1)
{
$req .= " UNION ";
$req .= "SELECT id_dossier,date_reception,aff_perrion_dossier,aff_client,entreprise,piqueteur,etude,commune,lieu,prepare_par,devis,reclame_le,point_arret,dossier_annule,id_facture FROM $t_dossier WHERE point_arret=1";
}
if ($VOIRANNULE==1)
{
$req .= " UNION ";
$req .= "SELECT id_dossier,date_reception,aff_perrion_dossier,aff_client,entreprise,piqueteur,etude,commune,lieu,prepare_par,devis,reclame_le,point_arret,dossier_annule,id_facture FROM $t_dossier WHERE dossier_annule=1";
}
if ($VOIRDEVIS==1)
{
$req .= " UNION ";
$req .= "SELECT id_dossier,date_reception,aff_perrion_dossier,aff_client,entreprise,piqueteur,etude,commune,lieu,prepare_par,devis,reclame_le,point_arret,dossier_annule,id_facture FROM $t_dossier WHERE devis=1";
}
$req .= " ORDER BY id_dossier DESC $limit";
$update = mysql_query($req,$connexion);





Je précise : le tout fonctionne parfaitement comme je veux. Sauf (et oui je suis la pour une raison ^^ ) le MYSQL_NUMS_ROWS dans la première partie (celui qui me sert à calculer le nombre de page)


C'est le UNION dans les requetes qui fait foirer cette fonction ?

La fonction SELECT ainsi composée m'affiche pourtant les lignes que je veux, mais le MYSQL_NUMS_ROWS m'affiche n'importe quoi (ou je lui demande n'importe quoi ^^)




Merci d'avance aux volontaires, le souci doit être minime ... (j'espère ^^ ! )
A voir également:

4 réponses

Bonjour

Ça m'étonnerait bien que mysql_num_rows marche mal...
Es-tu bien sûr de ce que tu comptes ? Chaque partie de ton UNION est un SELECT COUNT . Or, chaque select count renvoie UNE SEULE ligne. Donc tu récupères de 1 à 4 lignes au maximum selon tes variables $VOIRARRET, $VOIRDEVIS et $VOIRANNULE
Je pense que ce que tu cherches à faire, c'est plutôt (je n'ai pas trop cherché à comprendre les conditions, elles me semblent bizarres en première lecture) :
if ($MASTER==1)
{ $compt = "SELECT COUNT(id_dossier) as cnt  FROM $t_dossier WHERE etude!=1 AND point_arret!=1 AND dossier_annule!=1 AND devis !=1"; }
if ($MASTER==2)
{ $compt = "SELECT COUNT(id_dossier) as cnt FROM $t_dossier WHERE etude=1 AND point_arret!=1 AND dossier_annule!=1 AND devis !=1"; }
if ($MASTER==3)
{ $compt = "SELECT COUNT(id_dossier) as cnt FROM $t_dossier WHERE point_arret!=1 AND dossier_annule!=1 AND devis !=1"; }
if ($VOIRARRET==1) $compt .= " OR point_arret=1";
if ($VOIRANNULE==1) $compt .= " OR  dossier_annule=1";
if ($VOIRDEVIS==1) $compt .= " OR devis=1";
$result = mysql_query("$compt", $connexion);
$nbr = $result['cnt']; 
1
nico7382 Messages postés 279 Date d'inscription lundi 6 juin 2005 Statut Membre Dernière intervention 22 décembre 2010 50
3 mars 2010 à 12:33
Salut,


a mon avis, je ferai une étape intermédiaire pour débugguer ta requête :

avant d'exécuter la requête, je ferai un echo de la requête puis exit, pour n'avoir que la requête, ensuite tu exécute ta requête qui est afficher dans dans phpmyadmin, ou outre outil, et tu aura bien plus de précision sur l'erreur
0
ZeGroumf Messages postés 17 Date d'inscription samedi 13 février 2010 Statut Membre Dernière intervention 2 avril 2010
3 mars 2010 à 12:45
bah le souci, c'est qu'elle marche très bien, je l'affiche et elle est correcte (php ne trouve aucune erreur)


c'est juste le mysql_num_rows qui ne marche pas (bien), et je demandais si il existait une autre commande pour compter les lignes affectées par la requete (la première).
0
ZeGroumf Messages postés 17 Date d'inscription samedi 13 février 2010 Statut Membre Dernière intervention 2 avril 2010
3 mars 2010 à 20:07
oui elles sont bizarre, en effet ^^


en fait, c'est une application qui gère des dossiers (mon entreprise), plusieurs groupes de personnes utilisent l'application de manière différente.


Il me fallait donc des affichages personnalisables pour tous... J'ai cogité pour sortir ca.


En fin de compte, oui j'ai pigé cet après midi au taf qu'effectivement, il y avait 4 COUNT et pas un seul


j'ai donc sorti ca :


$nbr0= mysql_result($result,0,"COUNT(id_dossier)");
$nbr1= @mysql_result($result,1,"COUNT(id_dossier)");
$nbr2= @mysql_result($result,2,"COUNT(id_dossier)");
$nbr3= @mysql_result($result,3,"COUNT(id_dossier)");
$nbr = $nbr0 + $nbr1 + $nbr2 + $nbr3;


C'est bourrin à souhait, je sais, mais bon :/


j'ai du mettre des @ à cause du fait des variables dans les cookies. Il y a maxi 4 compteurs. Le compteur 0 sera toujours utilisé et les autres, pas forcément. Et donc pas toujours avec la même variable. (ex: $VOIRDEVIS pour un coup être sur le compteutr 2 et la fois d'après sur le compteur 4 !)


Cette solution marche très bien ( et pas si lente que j'aurais pu le croire ! )

Si des gens ont mieux comme technique, et surtout plus 'propre', je prend !!


Merci de vos réponses de cet après midi ;)
0