Comment faire une requete mysql count avec date_format [Résolu]

Messages postés
140
Date d'inscription
mardi 3 juin 2003
Statut
Membre
Dernière intervention
20 août 2012
- - Dernière réponse : cs_hdh
Messages postés
140
Date d'inscription
mardi 3 juin 2003
Statut
Membre
Dernière intervention
20 août 2012
- 9 juil. 2010 à 16:38
Bonjour,
aïe ! je me heurte à une requète mysql que je n'arrive pas à résoudre :
j'ai une table simplissime contenant
- un identifiant utilisateur
- la date de son clic sur une page

+-----------+-------------------+
+id_click + date_click +
+-----------+-------------------+
+ num + yyyy-mm-dd h:mm:ss+
+-----------+-------------------+



Je voudrais sortir un tableau présentant le nombre de clics par par jour.
+------------+------------+
+ 01/02/2010 + 3 clics +
+ 01/03/2010 + 9 clics +
+ 04/02/2010 + 1 clics +
+------------+------------+

la requète que j'utilise ne fonctionne pas comme je le veux
(j'ai bien les jours distincts et dans l'autre cas j'ai bien les nombre de clics par jour) mais arriver à avoir les deux ensembles m'est impossible....

oh vous les puits de sciences auriez vous de quoi me rafferaichir ????????

d'avance merci

$req ="SELECT count(id_click) as nb, date_format(date_click, '%Y-%m-%d') from $tableOpens group by date_format(date_click, '%Y-%m-%d') order by date_format(date_click, '%Y-%m-%d') desc";
$req ="SELECT date_format(date_click, '%Y-%m-%d') as toto from $tableOpens group by date_format(date_click, '%Y-%m-%d') order by date_format(date_click, '%Y-%m-%d') desc";
$req=mysql_query($req) or die('Erreur SQL !'.$req.mysql_error());

while ($ligne=mysql_fetch_array($req))
{
echo " >> ".$ligne[0].">_> ".$toto."
";
}



$nbtotal	=mysql_query("SELECT count(id_click) as nb from $tableOpens"); 
$nbtotal	=mysql_fetch_array($nbtotal) ;
echo "
Il y a eu au total ".$nbtotal["nb"]." clics.";



le temps n'épargne pas ce que l'ont fait sans lui.. le php non plus
Afficher la suite 

20/22 réponses

Meilleure réponse
Messages postés
140
Date d'inscription
mardi 3 juin 2003
Statut
Membre
Dernière intervention
20 août 2012
3
Merci
yeahhhhhhhhhhhhhhhhhhhhhhhhhhhh

$req =  'SELECT COUNT( id_click ) AS nb, DATE_FORMAT( date_click, "%Y-%m-%d" ), DATE(date_click) AS machin FROM opens GROUP BY machin';

$req=mysql_query($req) or die('Erreur SQL !'.$req.mysql_error());

while ($ligne=mysql_fetch_array($req))
{
echo " Il y a eu  ".$ligne[0]."  clic(s) le jour ".$ligne[machin].".
";
}

donne
Il y a eu 8 clic(s) le jour 2010-01-21.
Il y a eu 1 clic(s) le jour 2010-01-30.
Il y a eu 1 clic(s) le jour 2010-02-08.
Il y a eu 1 clic(s) le jour 2010-02-14.
Il y a eu 1 clic(s) le jour 2010-02-18.
Il y a eu 1 clic(s) le jour 2010-03-06.
Il y a eu 1 clic(s) le jour 2010-03-08.
Il y a eu 2 clic(s) le jour 2010-03-31.


c'est exactement cela !!
grand merci pour ton aide :-)
j'espère que cela en aidera d'autres !!
bon we à tous

pour rappel le dessin d'enregistrement est le suivant.

DROP TABLE IF EXISTS opens;
CREATE TABLE IF NOT EXISTS opens (
  id_click int(6) NOT NULL auto_increment,
  usermail varchar(100) NOT NULL default '',
  date_click datetime NOT NULL default '0000-00-00 00:00:00',
  PRIMARY KEY  (id_click)
) TYPE =MyISAM AUTO_INCREMENT=17 ;


INSERT INTO opens (id_click, usermail, date_click) VALUES
(1, '', '2010-01-21 11:16:14'),
(2, '', '2010-01-21 11:16:34'),
(3, '', '2010-01-21 11:16:40'),
(4, '', '2010-01-21 11:16:45'),
(5, '', '2010-01-21 11:16:54'),
(6, '', '2010-01-21 11:25:31'),
(7, '', '2010-01-21 11:25:40'),
(8, '', '2010-01-21 11:25:41'),
(9, '', '2010-01-30 14:49:18'),
(10, '', '2010-02-08 11:20:11'),
(11, '', '2010-02-14 08:14:51'),
(12, '', '2010-02-18 10:37:19'),
(13, '', '2010-03-06 12:27:16'),
(14, '', '2010-03-08 20:14:03'),
(15, '', '2010-03-31 06:01:20'),
(16, '', '2010-03-31 06:01:20');




le temps n'épargne pas ce que l'ont fait sans lui.. le php non plus

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 205 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_hdh
Messages postés
507
Date d'inscription
mardi 18 février 2003
Statut
Membre
Dernière intervention
22 juin 2012
2
0
Merci
$req = 'SELECT COUNT(id_click) as nb, DATE_FORMAT(date_click, "%Y-%m-%d") FROM $tableOpens GROUP BY date_click';

sa donne quoi sa ?

L0rD...
Commenter la réponse de xactise
Messages postés
140
Date d'inscription
mardi 3 juin 2003
Statut
Membre
Dernière intervention
20 août 2012
0
Merci
aiaiia tjs pas...
je pense que mon problème vient aussi de cette partie

while ($ligne=mysql_fetch_array($req))
{
echo " >> ".$ligne[0].">_> ".$nb."
";
}


....tu écrirais quoi toi ? perso je sèche



le temps n'épargne pas ce que l'ont fait sans lui.. le php non plus
Commenter la réponse de cs_hdh
Messages postés
507
Date d'inscription
mardi 18 février 2003
Statut
Membre
Dernière intervention
22 juin 2012
2
0
Merci
Test directement la requête dans PHPMyAdmin STP


L0rD...
Commenter la réponse de xactise
Messages postés
140
Date d'inscription
mardi 3 juin 2003
Statut
Membre
Dernière intervention
20 août 2012
0
Merci
résultat étrange (ca marche pas pour le 21 mais semble ok pour )

"1";"2010-01-21"
"1";"2010-01-21"
"1";"2010-01-21"
"1";"2010-01-21"
"1";"2010-01-21"
"1";"2010-01-21"
"1";"2010-01-21"
"1";"2010-01-21"
"1";"2010-01-30"
"1";"2010-02-08"
"1";"2010-02-14"
"1";"2010-02-18"
"1";"2010-03-06"
"1";"2010-03-08"
"2";"2010-03-31"




DROP TABLE IF EXISTS opens;
CREATE TABLE IF NOT EXISTS opens (
  id_click int(6) NOT NULL auto_increment,
  usermail varchar(100) NOT NULL default '',
  date_click datetime NOT NULL default '0000-00-00 00:00:00',
  PRIMARY KEY  (id_click)
) TYPE=MyISAM AUTO_INCREMENT=17 ;


INSERT INTO opens (id_click, usermail, date_click) VALUES
(1, '', '2010-01-21 11:16:14'),
(2, '', '2010-01-21 11:16:34'),
(3, '', '2010-01-21 11:16:40'),
(4, '', '2010-01-21 11:16:45'),
(5, '', '2010-01-21 11:16:54'),
(6, '', '2010-01-21 11:25:31'),
(7, '', '2010-01-21 11:25:40'),
(8, '', '2010-01-21 11:25:41'),
(9, '', '2010-01-30 14:49:18'),
(10, '', '2010-02-08 11:20:11'),
(11, '', '2010-02-14 08:14:51'),
(12, '', '2010-02-18 10:37:19'),
(13, '', '2010-03-06 12:27:16'),
(14, '', '2010-03-08 20:14:03'),
(15, '', '2010-03-31 06:01:20'),
(16, '', '2010-03-31 06:01:20');



le temps n'épargne pas ce que l'ont fait sans lui.. le php non plus
Commenter la réponse de cs_hdh
Messages postés
507
Date d'inscription
mardi 18 février 2003
Statut
Membre
Dernière intervention
22 juin 2012
2
0
Merci
SELECT COUNT(id_click) as nb, DATE_FORMAT(date_click, "%Y-%m-%d") FROM opens GROUP BY SUBSTR(date_click,1,10)

VOILA ;)

testez et approuvé


L0rD...
Commenter la réponse de xactise
Messages postés
140
Date d'inscription
mardi 3 juin 2003
Statut
Membre
Dernière intervention
20 août 2012
0
Merci
argh on est pas loin ... mais il y a encore un soucis


avec cette requete 
SELECT COUNT( id_click ) AS nb, DATE_FORMAT( date_click, "%Y-%m-%d" ) FROM opens
 GROUP BY SUBSTR(date_click,1,10) 

j'ai

#1064 - You have an error in your SQL syntax.  Check the manual that corresponds to your MySQL server version for the right syntax to use near '(date_click,1,10)
LIMIT 0, 30' at line 2 


ca c'est sur phpmyadmin... pourriez vous me dire aussi comment afficher dans ma page php

while ($ligne=mysql_fetch_array($req))
{
echo " le jour ".$ligne[0]." il y a eu ".$nb????." clics
";
}


....et encore merci pour votre persévérance :-)

le temps n'épargne pas ce que l'ont fait sans lui.. le php non plus
Commenter la réponse de cs_hdh
Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
21
0
Merci
Salut,

Ca me semble pourtant correct.

Quelle est la version de mysql ?
Qu'est ce que ça raconte si tu remplaces SUBSTR par SUBSTRING ?

Et en faisant comme ça ? (ce qui me semble d'ailleurs un peu plus clean que le SUBSTR) :

SELECT COUNT( id_click ) AS nb, DATE_FORMAT( date_click, "%Y-%m-%d" ) 
FROM opens
GROUP BY DATE(date_click)



Cordialement,


Kohntark -
Commenter la réponse de kohntark
Messages postés
507
Date d'inscription
mardi 18 février 2003
Statut
Membre
Dernière intervention
22 juin 2012
2
0
Merci
la requete fonctionne je l'ai tester avec la table et les donnée que tu as fourni plus haut.

@Kohntark : le souci avec ta requete c'est qu'il va distinct egallement les heure les minute et les seconde : exemple avec les donnée qu'il a fournie :


(1, '', '2010-01-21 11:16:14'),
(2, '', '2010-01-21 11:16:34'),
(3, '', '2010-01-21 11:16:40'),

et lui veut grouper par jour d'ou le substr

@hdh je ne comprends pas que sa ne fonctionne pas chez toi.

L0rD...
Commenter la réponse de xactise
Messages postés
507
Date d'inscription
mardi 18 février 2003
Statut
Membre
Dernière intervention
22 juin 2012
2
0
Merci
Oups je n'ai rien dit Kohntark je n'avais pas vu le DATE(date_click) ^^

En effet cela fonctionnera très bien aussi


L0rD...
Commenter la réponse de xactise
Messages postés
140
Date d'inscription
mardi 3 juin 2003
Statut
Membre
Dernière intervention
20 août 2012
0
Merci
alalala j'ai encore cette erreur

voila la version de mysql que j'utilise...
# Version du serveur: 4.0.27
# Version du protocole: 10
# Serveur: mysql1 via TCP/IP
# Version du client MySQL: 5.0.32

snif et re-snif

Erreur

requête SQL: Documentation

SELECT COUNT( id_click ) AS nb, DATE_FORMAT( date_click, "%Y-%m-%d" )
FROM opens
GROUP BY DATE( date_click )
LIMIT 0 , 30

MySQL a répondu:Documentation
#1064 - You have an error in your SQL syntax.  Check the manual that corresponds to your MySQL server version for the right syntax to use near '(date_click)

LIMIT 0, 30' at line 3 


encore merci pour votre aide :-)


le temps n'épargne pas ce que l'ont fait sans lui.. le php non plus
Commenter la réponse de cs_hdh
Messages postés
507
Date d'inscription
mardi 18 février 2003
Statut
Membre
Dernière intervention
22 juin 2012
2
0
Merci
J'ai tester la requete tel quel et sa fonctionne très bien chez moi

Version du client MySQL: 5.0.51a

je sais pas si la version a une incidence.

Bon courage pour la suite


L0rD...
Commenter la réponse de xactise
Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
21
0
Merci
Est ce possible d'avoir une réponse à ma question ? :
Qu'est ce que ça raconte si tu remplaces SUBSTR par SUBSTRING ?


Ta version de serveur est vieillotte, de mémoire SUBSTR() ne doit pas passer (mais SUBSTRING() si)

Pour DATE() j'ai un gros doute.


Kohntark -
Commenter la réponse de kohntark
Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
21
0
Merci
Je viens de vérifier, la fonction DATE() n'est disponible qu'à partir de MySQL 4.1.1

tu es chez qui pour avoir une version aussi vieille ?
Il faudrait sans doute penser à changer là


Cordialement,


Kohntark -
Commenter la réponse de kohntark
Messages postés
140
Date d'inscription
mardi 3 juin 2003
Statut
Membre
Dernière intervention
20 août 2012
0
Merci
test avec "SUBSTRING"

SELECT COUNT( id_click ) AS nb, DATE_FORMAT( date_click, "%Y-%m-%d" ) FROM opens
GROUP BY SUBSTRING(date_click,1,10)

étrangement cela fonctionne sous phpmyadmin, par contre pas sous php ca ne marche pas

Erreur SQL !You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '( date_click )' at line 1


y aurait il une alternative dans ce monde ???


merci :-)





le temps n'épargne pas ce que l'ont fait sans lui.. le php non plus
Commenter la réponse de cs_hdh
Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
21
0
Merci
Est ce possible d'avoir une réponse à ma question ? :
tu es chez qui pour avoir une version aussi vieille ?


Il y a de grandes chances qu'il y ait une erreur dans ton code PHP.
Peux tu le poster ?

Cordialement,



Kohntark -
Commenter la réponse de kohntark
Messages postés
140
Date d'inscription
mardi 3 juin 2003
Statut
Membre
Dernière intervention
20 août 2012
0
Merci
snif... je vais finir par croire que c'est plus simple en dure :-/


$req = "SELECT count(id_click) as nb, date_format(date_click, '%Y-%m-%d') from $tableOpens group by date_format(date_click, '%Y-%m-%d') order by date_format(date_click, '%Y-%m-%d') desc";
$req = "SELECT date_format(date_click, '%Y-%m-%d') as toto from $tableOpens group by date_format(date_click, '%Y-%m-%d') order by date_format(date_click, '%Y-%m-%d') desc";
$req = "SELECT COUNT(id_click) as nb, DATE_FORMAT(date_click, '%Y-%m-%d') FROM $tableOpens GROUP BY date_click"; 
$req = 'SELECT COUNT( id_click ) AS nb, DATE_FORMAT( date_click, "%Y-%m-%d" ) FROM opens GROUP BY DATE( date_click )';
$req = 'SELECT COUNT( id_click ) AS nb, DATE_FORMAT( date_click, "%Y-%m-%d" ) FROM opens GROUP BY SUBSTRING(date_click,1,10)'; 

$req=mysql_query($req) or die('Erreur SQL !'.$req.mysql_error());

while ($ligne=mysql_fetch_array($req))
{
echo " >> ".$ligne[0].">_> ".$nb."
";
}



$nbtotal	=mysql_query("SELECT count(id_click) as nb from $tableOpens"); 
$nbtotal	=mysql_fetch_array($nbtotal) ;
echo "
Il y a eu au total ".$nbtotal["nb"]." clics.";


le temps n'épargne pas ce que l'ont fait sans lui.. le php non plus
Commenter la réponse de cs_hdh
Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
21
0
Merci
Est ce possible d'avoir une réponse à ma question ? :

Est ce possible d'avoir une réponse à ma question ? :
tu es chez qui pour avoir une version aussi vieille ?


Dis moi hdh, ça t'ennuie de répondre à mes questions ?
Cela fait la troisième fois que je parle dans le vide et honnêtement ce n'est pas agréable.


Kohntark -
Commenter la réponse de kohntark
Messages postés
140
Date d'inscription
mardi 3 juin 2003
Statut
Membre
Dernière intervention
20 août 2012
0
Merci
Suis désolé je pensais avoir posté ma réponse il y a longtemps :-/
suis chez nuxit (dont je suis assez content ds l'ensemble vu le prix).
1000 excuses encore :-)


le temps n'épargne pas ce que l'ont fait sans lui.. le php non plus
Commenter la réponse de cs_hdh
Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
21
0
Merci
je pensais avoir posté ma réponse il y a longtemps

OK, pas grave.

Je suis allé faire un tour rapide sur Nuxit et je n'ai vu que des références à MySQL 5.
Je pense que tu devais prendre contact avec ton hébergeur afin de clarifier la situation, cela t'éviterait bien des problèmes (la preuve)
La bonne solution est là.

Je ne vois pas d'erreur dans ton code.
Tu peux toujours essayer ça, mais j'ai un gros doute :
SELECT COUNT( id_click ) AS nb,
DATE_FORMAT( date_click, "%Y-%m-%d" ),
DATE(date_click) AS machin
FROM opens
GROUP BY machin


Tiens nous au courant,


Cordialement,

Kohntark -
Commenter la réponse de kohntark