Comment faire une requete mysql count avec date_format

Résolu
cs_hdh Messages postés 140 Date d'inscription mardi 3 juin 2003 Statut Membre Dernière intervention 20 août 2012 - 7 juil. 2010 à 12:00
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

22 réponses

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
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
3
xactise Messages postés 507 Date d'inscription mardi 18 février 2003 Statut Membre Dernière intervention 22 juin 2012 2
7 juil. 2010 à 15:50
$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...
0
cs_hdh Messages postés 140 Date d'inscription mardi 3 juin 2003 Statut Membre Dernière intervention 20 août 2012
7 juil. 2010 à 16:44
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
0
xactise Messages postés 507 Date d'inscription mardi 18 février 2003 Statut Membre Dernière intervention 22 juin 2012 2
7 juil. 2010 à 16:46
Test directement la requête dans PHPMyAdmin STP


L0rD...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_hdh Messages postés 140 Date d'inscription mardi 3 juin 2003 Statut Membre Dernière intervention 20 août 2012
7 juil. 2010 à 17:09
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
0
xactise Messages postés 507 Date d'inscription mardi 18 février 2003 Statut Membre Dernière intervention 22 juin 2012 2
7 juil. 2010 à 17:42
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...
0
cs_hdh Messages postés 140 Date d'inscription mardi 3 juin 2003 Statut Membre Dernière intervention 20 août 2012
7 juil. 2010 à 18:11
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
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
7 juil. 2010 à 20:30
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 -
0
xactise Messages postés 507 Date d'inscription mardi 18 février 2003 Statut Membre Dernière intervention 22 juin 2012 2
8 juil. 2010 à 07:46
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...
0
xactise Messages postés 507 Date d'inscription mardi 18 février 2003 Statut Membre Dernière intervention 22 juin 2012 2
8 juil. 2010 à 07:49
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...
0
cs_hdh Messages postés 140 Date d'inscription mardi 3 juin 2003 Statut Membre Dernière intervention 20 août 2012
8 juil. 2010 à 08:53
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
0
xactise Messages postés 507 Date d'inscription mardi 18 février 2003 Statut Membre Dernière intervention 22 juin 2012 2
8 juil. 2010 à 09:03
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...
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
8 juil. 2010 à 09:41
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 -
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
8 juil. 2010 à 09:48
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 -
0
cs_hdh Messages postés 140 Date d'inscription mardi 3 juin 2003 Statut Membre Dernière intervention 20 août 2012
8 juil. 2010 à 09:59
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
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
8 juil. 2010 à 10:07
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 -
0
cs_hdh Messages postés 140 Date d'inscription mardi 3 juin 2003 Statut Membre Dernière intervention 20 août 2012
8 juil. 2010 à 11:52
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
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
8 juil. 2010 à 12:04
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 -
0
cs_hdh Messages postés 140 Date d'inscription mardi 3 juin 2003 Statut Membre Dernière intervention 20 août 2012
8 juil. 2010 à 12:16
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
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
8 juil. 2010 à 20:11
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 -
0
Rejoignez-nous