Mysql num rows, avec un UNION ?
Résolu
ZeGroumf
Messages postés
17
Date d'inscription
Statut
Membre
Dernière intervention
-
ZeGroumf Messages postés 17 Date d'inscription Statut Membre Dernière intervention -
ZeGroumf Messages postés 17 Date d'inscription Statut Membre Dernière intervention -
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 ^^ ! )
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:
- Mysql num rows, avec un UNION ?
- Touche verr num - Guide
- Trait d'union insécable word - Guide
- Mysql community server - Télécharger - Bases de données
- French union avis - Forum Consommation & Internet
- S'envoyer de l'argent a soi meme western union - Forum Vos droits sur internet
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) :
Ç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'];
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
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
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).
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).
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 ;)
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 ;)