Page 1 sur 2
Problème de comptage de lignes depuis MySQL
Posté : 03 avr. 2006, 13:05
par shen
modération de zeus : le sujet d'origine du message est http://www.phpfrance.com/forums/voir_sujet-16782.php
salut j'ai un petit soucis sur ce meme sujet alors je me permets si cela ne vous dérange pas de poser une question, merci!!!
alors moi pour compter le nombre de résultat récupéré dans ma base j'utilise une requete avec count et mes conditions mais un petit soucis là sa ne me récupère pas les bonnes données!!!
en fait je veut récupérer toutes les données de ma base ou Msg est différent de Envoi Réussi (les majuscules font une différence?), différent de Réception et différent de Envoi ftp réussi.
voici ma requete pour compter:
$sqlcountE="SELECT COUNT(NumTrans) FROM Archive WHERE Msg <> 'Réception' AND Msg <> 'Envoi Réussi' AND Msg <> 'Envoi réussi' AND Msg <> 'Envoi ftp réussi' AND Msg <> 'Envoi Réussi (attente de l accusé)'";
et voici ma requete pour afficher:
$sqlE="SELECT NumTrans,Date_t,Corres,Msg,Type FROM Archive ";
$sqlE .= "WHERE Msg = 'Envoi réussi'";// OR Msg <> 'Réception' OR Msg <> 'Envoi ftp réussi' ORDER BY Date_c $tri,Heure $tri";
sa m'affiche uniquement les données ou Msg='Envoi Réussi'.
ya t'il une erreur dans ma requete car je ne comprends pas pourquoi sa m'affiche le contraire.
Merci
Posté : 03 avr. 2006, 13:09
par zeus
Si les résultats sont différents, c'est parce que les clauses where sont différentes. Si tu veux que les 2 requetes retournent les mêmes données, il faut qu'elles soient identiques ...
Mais tu aurais dû ouvrir un nouveau sujet

si ta question n'est pas résolue tout de suite, je partagerais le sujet pour que ta question est plus de réponses

Posté : 03 avr. 2006, 13:21
par shen
oui grosse erreur de ma part à force de toujours faire des modif pour tester.
voici ma requete pour afficher et qui ne m'affiche plus rien:
$sqlE="SELECT NumTrans,Date_t,Corres,Msg,Type FROM Archive ";
$sqlE .= "WHERE Msg <> 'Envoi réussi' AND Msg <> 'Réception' AND Msg <> 'Envoi ftp réussi' AND Msg <> 'Envoi Réussi (attente de l accusé)' ORDER BY Date_c $tri,Heure $tri";
et ma requete pour compter le nombre de résultat:
$sqlcountE="SELECT COUNT(NumTrans) FROM Archive WHERE Msg <> 'Réception' AND Msg <> 'Envoi Réussi' AND Msg <> 'Envoi ftp réussi' AND Msg <> 'Envoi Réussi (attente de l accusé)'";
j'avais fait les modif pour voir si sa m'affichait bien quelque chose.
sinon sa me donne le meme résultat pour le compte il me compte uniquement les résultat ou msg = Envoi Réussi.
Posté : 03 avr. 2006, 13:27
par shen
Merci Zeus t'es trop gentil mais maintenant c'est un peu trop tard pour ouvrir un nouveau sujet non? car je vais me répéter et pas envie de me faire engueulé encore par mes petites bourdes
hihihi!!!
Posté : 03 avr. 2006, 13:49
par zeus
C'est pas un soucis. Je viens de scinder le sujet comme ça, on mélangera pas les réponses 
Posté : 03 avr. 2006, 13:54
par zeus
Est-ce que tu es sûr que la manière dont tu ecrit "Envoi Réussi est la même que celle qui est en BdD ?
Posté : 04 avr. 2006, 10:35
par shen
salut désolé de pas avoir répondu hier, j'avais un entretien pour un boulot!!!
alors oui je suis sure de l'écriture :il y a ' Envoi réussi' et 'Envoi Réussi' dans la base .j'arrive à afficher toute la base en entière.
PS à Zeus : Merci d'avoir scindé le sujet en deux.
Posté : 04 avr. 2006, 10:46
par shen
alors une nouvelle donnée, j'ai compté moi meme le nombre de résultat correspondant à ma requete sqlcoutE, il me donne le bon résultat, il y a bien 77 transmissions échouées. Mais rien ne s'affiche...
Posté : 04 avr. 2006, 11:25
par shen
//Execution des requêtes
if( $erreur=="false" || $erreur=="" )
{
echo "erreur false sql: ".$sql."<br>\n";
echo "erreur false sqlcount: ".$sqlcount."<br>\n";
$result=$conn->SelectLimit($sql,$limit,$debut);
$resultcount=$conn->Execute($sqlcount);
//Affichage du nombre de résultats.
if(!$resultcount) print $conn->ErrorMsg()."<br>\n";
else printf("<br>\nNous avons ".$resultcount->fields[0]." transmission(s) enregistré(s) dans notre base.<br><br>\n\n");
}
else
{
echo "erreur true sqlE: ".$sqlE."<br>\n";
echo "erreur true sqlcountE: ".$sqlcountE."<br>\n";
$result=$conn->SelectLimit($sqlE,$limit,$debut);
$resultcount=$conn->Execute($sqlcountE);
//Affichage du nombre de résultats.
if(!$resultcount) print $conn->ErrorMsg()."<br>\n";
else printf("<br>\nNous avons ".$resultcount->fields[0]." transmission(s) échouée(s) enregistré(s) dans notre base.<br><br>\n\n");
}
voilà comment j'exécute mes requetes sa marche pour afficher la totalité de la base mais pas pour ma requete sqlE.
Posté : 04 avr. 2006, 11:41
par shen
alors apparemment mon $result est vide mais il ne m'affiche aucun message d'erreur ... bizarre.
voici la partie affichage:
//Affichage des données de la table Archive
if(!$result)
{
print $conn->ErrorMsg()."<br>";
printf("Erreur!!!!");
}
else
{
printf("Le tableau de résultat.");
//Affichage des données dans un tableau
$nbchps = 5;
printf("<table border=1>\n");
/*0*/printf("<th>N°</th>\n");
/*1*/printf("<th>Date & Heure<a href=indexfax.php?tri=&debut=$debut&limit=$limit><img src='croiss.bmp' border=0 title='tri croissant'></a>");
printf("<a href=indexfax.php?tri=DESC&debut=$debut&limit=$limit><img src='desc.bmp' border=0 title='tri décroissant'></a></th>\n");
/*2*/printf("<th>Code Correspondant</th>\n");
/*3*/printf("<th>Statut</th>\n");
/*4*/printf("<th>Type transmission</th>\n");
while(!$result->EOF)
{
printf("<tr>\n");
for($i=0;$i < $nbchps;$i++)
{
if($i==1)
{
$sqlDH="SELECT Date_t,Heure FROM Archive WHERE NumTrans=".$result->fields[0];
$resultDH=$conn->Execute($sqlDH);
printf("<td><center> ".$resultDH->fields[0]." à ".$resultDH->fields[1]." </center></td>");
}
else printf("<td><center> " . $result->fields[$i] . "</center></td>\n");
}
$result->MoveNext();
printf("</tr>\n");
}
printf("<br><br><br>\n");
printf("</table>\n");
}
donc je comprends pas, si vous vous comprenez, éclairezmoi please!!!
Posté : 04 avr. 2006, 12:32
par shen
bon il faut utiliser 'NOT LIKE' dans les requete au lieu de '<>'.
mais sa marche pas quand je met toutes mes conditions avec AND.
Posté : 04 avr. 2006, 12:48
par shen
J'ai honte ct vraiment une erreur bete de chez bete....
alors en fait comme j'utilisais des AND alors il y avait un terme non existant dans la base et donc c'est pour ca qu'il m'indiquait que $result était vide.
je vais tester avec OR.
Posté : 04 avr. 2006, 12:58
par shen
je suis perdu ça ne marche plus à nouveau, j'ai remis avec AND et juste le premier terme de ma condition et rien...
aidez moi il doit y avoir une erreur que je ne voie pas!!!!
Posté : 04 avr. 2006, 13:21
par zeus
Fait voir ta requete actuelle
Posté : 04 avr. 2006, 14:11
par shen
$sqlE = "SELECT NumTrans,Date_t,Corres,Msg,Type FROM Archive ";
$sqlE .= "WHERE Msg NOT LIKE 'Réception'";
$sqlE .= "ORDER BY Date_c $tri,Heure $tri";
voilà ma requete, elle a marché et à fur et à mesure que je rajoutais les condition sa marchait puis j'ai changer les AND en OR puis plus rien.