2010-10-29 53 views
0

Pouvez-vous s'il vous plaît me dire pourquoi cela fonctionne:MySQL Sélection et Count Période: Ne fonctionne pas traverser la barrière mois

$customer_data_date14daysAgo = mysql_query("SELECT COUNT(*) AS count 
FROM tableName WHERE datetime BETWEEN '$date14daysAgo%' and 
'$dateToday%' ") or die(mysql_error()); 

Mais cela ne fonctionne pas?

$customer_data_date30daysAgo = mysql_query("SELECT COUNT(*) AS count 
FROM tableName WHERE datetime BETWEEN '$date30daysAgo%' and 
'$dateToday%' ") or die(mysql_error()); 

PHP:

$dateToday = date ('Y-M-d', strtotime ('-0 day' . $date)); 
$date14daysAgo = date ('Y-M-d', strtotime ('-14 day' . $date)); 
$date30daysAgo = date ('Y-M-d', strtotime ('-1 month' . $date)); 

$ dateToday = 2010-Oct-28
$ date14daysAgo = 2010-Oct-21
$ date30daysAgo = 2010-Sep-28

La seule La différence est que la deuxième requête s'étend sur la barrière Sep-Oct.

Si je mets la date manuellement 2010-Oct-01 jusqu'à aujourd'hui - il fonctionne
Mais si son 2010-Sep-30 jusqu'à aujourd'hui - il cesse de travailler

Merci!

+2

Que cesse de travailler ??? Quel est le problème? – Mischa

+0

s'il vous plaît expliquez-nous clairement ce que vous voulez faire exactement? – klox

+0

Ce qui arrête de fonctionner, c'est qu'il arrête de compter correctement - dès qu'il franchit la "bordure du mois" de Sep à Oct - en quelque sorte il ne compte pas le nombre réel, mais compte plutôt et rapporte un nombre inexact. –

Répondre

1

si vous voulez rechercher des données il y a un mois jusqu'à la date actuelle, cela peut peut-être aider:

SELECT COUNT(*) AS count FROM table 
WHERE date BETWEEN DATE_SUB(CURRENT_DATE(),INTERVAL 1 MONTH) AND CURRENT_DATE() 

et si vous voulez montrer il y a 1 mois (la date non inclus), vous pouvez utiliser:

SELECT COUNT(*) AS count FROM table 
WHERE date <= DATE_SUB(CURRENT_DATE(),INTERVAL 1 MONTH) 

mais si je ne suis pas mal compris.


en suivant votre question, essayez comme:

$customer_data_date30daysAgo = mysql_query("SELECT COUNT(*) AS count 
FROM tableName WHERE datetime BETWEEN '".$date30daysAgo."%' and 
'".$dateToday."%' ") or die(mysql_error()); 
+0

Salut, cela n'a pas fonctionné pour moi parce que je n'ai pas encore compris comment ajouter la variable générique "%" dans l'équation. Mes dates sont définies comme DateTime comme ceci: "2010-Nov-02: 10:25:34" - J'ai donc essayé: $ customer_data_date30daysAgo = mysql_query ("SELECT COUNT (*) AS compter de la table WHERE datetime ENTRE DATE_SUB (CURRENT_DATE()%, INTERVAL 1 MOIS) et CURRENT_DATE()% ") ou die (mysql_error()); Mais il montre l'erreur de syntaxe mysql - comment puis-je ajouter la variable générique pour ignorer quoi que ce soit après aaaa-mm-jj? Merci beaucoup! –

+0

si vous voulez utiliser "%", essayez comme ceci: '". $ Bla."%' – klox

+0

Pouvez-vous clarifier - Je ne comprends pas la syntaxe. Comment l'écrire: CURRENT_DATE()% –

1

MySQL n'aime pas être dates données avec des noms de mois (par exemple "2010-oct-28"). Le recommended format est tout numérique comme ceci: 2010-10-28.

Alors, quand vous appelez le php date function, demandez dans ce format:

$dateToday = date ('Y-m-d', strtotime ('-0 day' . $date)); 
$date14daysAgo = date ('Y-m-d', strtotime ('-14 day' . $date)); 
$date30daysAgo = date ('Y-m-d', strtotime ('-1 month' . $date)); 

qui donnera ces chaînes:
$ dateToday = 2010-10-28
$ date14daysAgo = 2010-10- 21
$ date30daysAgo = 2010-10-28

Et cela devrait rendre votre travail SQL mieux.