Titre: mySQL: count () ne m'affiche pas tous pas tous les résultats
Posté par: tonguim le le 28-10-2003 a 18:42:13
Bonjour,
Je suis entrain de réaliser un programme qui gère des SMS; j'ai effectué une requête en mysql pour afficher les SMS envoyés à l'etranger, classés par destination. La requête que je lance m'affiche seulement les pays vers lesquels il y a eu des envois et n'affiche pas les autres. J'utilise pour cela l'agrégat count() mais il me supprime les lignes où le count() a renvoyé 0, ou plutôt il supprime les lignes de la table de gauche qui n'ont pas de correspondance dans la table de droite (et dont le count est 0). Quelqu'un peut-il m'aider?
Merci |
Titre: Re:mySQL: count () ne m'affiche pas tous pas tous les résultats
Posté par: Trantsiss le le 28-10-2003 a 20:06:56
| J'ai rien compris à ce que tu racontes, serait-il possible d'avoir un exemple de la table de sms et la partie du code recherchant dans cette table stp ? |
Titre: Re:mySQL: count () ne m'affiche pas tous pas tous les résultats
Posté par: tonguim le le 29-10-2003 a 11:57:30
voici la stucture de la première table:
Code:
CREATE TABLE `destinations` ( `Indicatif` varchar(10) NOT NULL default '', `Destination` varchar(50) default '', PRIMARY KEY (`Indicatif`), KEY `destination` (`Destination`) ) TYPE=MyISAM; |
|
et celle de la seconde table:
Code:
CREATE TABLE `crsms` ( `DateHeure` datetime NOT NULL default '0000-00-00 00:00:00', `Expediteur` varchar(18) NOT NULL default '', `Destinataire` varchar(18) NOT NULL default '', `Type` tinyint(3) unsigned NOT NULL default '0', `IOModule` tinyint(3) unsigned NOT NULL default '0', `AModule` tinyint(3) unsigned NOT NULL default '0', `GSMCode` char(2) NOT NULL default '', `DStatus` tinyint(3) unsigned NOT NULL default '0', `Length` tinyint(3) unsigned NOT NULL default '0', `IndicatifExp` varchar(10) default '[NULL]', `IndicatifDest` varchar(10) default '[NULL]', `RService` char(3) NOT NULL default '', `SMSCCode` tinyint(3) unsigned default NULL, UNIQUE KEY `indexPrincipal` (`DateHeure`,`Expediteur`,`Destinataire`,`Type`), KEY `indexExp` (`Expediteur`), KEY `indexDest` (`Destinataire`), KEY `IndicatifExp` (`IndicatifExp`), KEY `indexdatetime` (`DateHeure`), KEY `IndicatifDest` (`IndicatifDest`) ) TYPE=MyISAM; |
|
et maintenant la requête:
Code:
SELECT indicatif,destination,count(indicatif) FROM `destinations` left outer join crsms on indicatif=indicatifdest where dateheure between '2003-09-01' and '2003-09-02' group by indicatif |
|
merci |
Titre: Re:mySQL: count () ne m'affiche pas tous pas tous les résultats
Posté par: Trantsiss le le 29-10-2003 a 13:58:28
Mmh perso je n'utilise pas trop le outter left join.
J'écrirais la requête comme ça :
SELECT indicatif,destination,count(indicatif) as nb_appel FROM destinations,crsms where indicatif=indicatifdest and (dateheure between '2003-09-01' and '2003-09-02') group by indicatif
essaie de voir si ça marcha mieux |
Titre: Re:mySQL: count () ne m'affiche pas tous pas tous les résultats
Posté par: ytsamy le le 30-10-2003 a 10:34:59
Normalement, le left join devrait faire l'affaire. d'apres la doc, il devrait donner toutes les destinations, meme celles vers lesquelles il n'y a pas eu d'envoi (celles qui n'ont pas de correspondance dans la table CRSMS) |
Titre: Re:mySQL: count () ne m'affiche pas tous pas tous les résultats
Posté par: ytsamy le le 30-10-2003 a 16:07:26
le probleme vient de la combinaison de l'aggregat et du where...
lors du left join, un ligne de la table de gauche qui n'a pas de correspondance a droite, MySQL insere un enregistrement avec tous les champs initialise a NULL. le where qui vient ensuite elimine ces lignes (puisque celles-ci ont tout a NULL).
Essaie de faire une sous requete dans laquelle tu filtre avec where. et tu joins le resultat a la table destination:
select indicatif, destination,total from destinations left join (select indicatifdest, count(*) as total from crsms where dateheure between '2003-09-01' and '2003-09-02' group by indicatifdest ) as d on indicatif=indicatifdest
order by destination
|
Forum-webmaster | Actionné par YaBB SE
© 2001-2003, YaBB SE Dev Team. Tous droits réservés.
|