Problème de comptage de lignes depuis MySQL

Eléphant du PHP | 89 Messages

03 avr. 2006, 13:05

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

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

03 avr. 2006, 13:09

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 ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 89 Messages

03 avr. 2006, 13:21

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.

Eléphant du PHP | 89 Messages

03 avr. 2006, 13:27

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 :oops:
hihihi!!!

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

03 avr. 2006, 13:49

C'est pas un soucis. Je viens de scinder le sujet comme ça, on mélangera pas les réponses :)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

03 avr. 2006, 13:54

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 ?
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 89 Messages

04 avr. 2006, 10:35

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.

Eléphant du PHP | 89 Messages

04 avr. 2006, 10:46

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...

Eléphant du PHP | 89 Messages

04 avr. 2006, 11:25

//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.

Eléphant du PHP | 89 Messages

04 avr. 2006, 11:41

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>&nbsp;".$resultDH->fields[0]." à ".$resultDH->fields[1]." </center></td>");
			}
			else	printf("<td><center>&nbsp;" . $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!!!

Eléphant du PHP | 89 Messages

04 avr. 2006, 12:32

bon il faut utiliser 'NOT LIKE' dans les requete au lieu de '<>'.
mais sa marche pas quand je met toutes mes conditions avec AND.

Eléphant du PHP | 89 Messages

04 avr. 2006, 12:48

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.

Eléphant du PHP | 89 Messages

04 avr. 2006, 12:58

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!!!!

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

04 avr. 2006, 13:21

Fait voir ta requete actuelle
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 89 Messages

04 avr. 2006, 14:11

$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.