0

これが機能する理由を教えてください。

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

しかし、これはそうではありませんか?

$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

唯一の違いは、2番目のクエリが9月から10月のバリアにまたがることです。

日付を手動で2010年10月1日から今日までに設定すると機能します
が、2010年9月30日から今日までは機能しなくなります

ありがとうございました!

4

3 に答える 3

1

現在の日付までの1か月前の検索データが必要な場合は、おそらくこれが役立ちます。

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

1か月前(現在の日付は含まれていません)を表示する場合は、次を使用できます。

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

しかし、私が誤解していなければ。


あなたの質問に従うことによって、次のようにしてみてください:

$customer_data_date30daysAgo = mysql_query("SELECT COUNT(*) AS count 
FROM tableName WHERE datetime BETWEEN '".$date30daysAgo."%' and 
'".$dateToday."%' ") or die(mysql_error());
于 2010-10-29T01:55:08.673 に答える
1

MySQL は、日付に月名を付けることを好みません (例: "2010-Oct-28")。推奨される形式は、2010-10-28 のようにすべて数値です。

したがって、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-10-28
$date14daysAgo = 2010-10-21
$date30daysAgo = 2010-10-28

これにより、SQL の動作が改善されるはずです。

于 2010-12-18T12:30:44.583 に答える
0

日付の操作方法に関する記事を書きました。MySQL のコード サンプルも含まれています。

http://use-the-index-luke.com/sql/where-clause/obfuscation/dates

于 2010-12-18T12:51:34.250 に答える