1

データベースへの呼び出しを1回だけ実行して、このプロセスを実行する方法があるかどうかを知りたいだけです。基本的に、今日の日付がフィールド'date_out'+7日より古いデータベースからのエントリをカウントする必要があります。私は次のようなことを考えていました:

$today = date("Y-m-d"); //this is the format of date_out in my db!

$count_query = "SELECT count(*) FROM `group` WHERE ADDDATE('date_out', INTERVAL 7 DAY) <= $today  ";
$count_result = mysql_query($count_query) or trigger_error("SQL", E_USER_ERROR);
$query_data = mysql_fetch_row($count_result);
$number_ty = $query_data[0];

if ($number_ty >= 1) {
// do something
}

このコードでは、$number_tyは常に0です。この質問の目的は、前に述べたように、カウントが2回ではなく1回のmysql呼び出しで実行できるかどうかを知ることです。シンプルさ、清潔さ、怠惰を目指しています:-)

ありがとう!

4

3 に答える 3

5

引用するべきではありませんdate_out

ADDDATE(date_out, INTERVAL 7 DAY)

あなた引用する必要があります$today

<= '$today'

これが修正されたクエリです。それでも、MysqliまたはPDOを調べることをお勧めします。使用しているライブラリは非推奨です。

$count_query = "SELECT count(*) FROM `group` WHERE ADDDATE(date_out, INTERVAL 7 DAYS) <= '$today'";
于 2012-12-09T19:59:49.067 に答える
2

他の人が正しく答えているので、あなたは正しいタイプの引用符を使う必要があります。一重引用符は、文字列リテラルと日付リテラル用です。MySQLは、列名の区切り文字にバックティックを使用します。

また、date_out列をそのままにして、計算を固定日付$todayに適用します。MySQLがでインデックスを使用しやすくなりますdate_out

また、MySQLには組み込み関数があるCURDATE()ため、PHP変数の挿入を回避できるため、SQLインジェクションからの保護が容易になります。

. . .
$count_query = "SELECT COUNT(*) FROM `group` 
    WHERE `date_out` <= SUBDATE(CURDATE(), INTERVAL 7 DAY)";
. . .
于 2012-12-09T20:09:12.413 に答える
1

'date_out'"date_out"有効な日付ではない値の文字列を意味します

`date_out` は列名であり、これを使用します

と混合'しました`(バッククォートで引用)。postgres'では別の意味(列名)がありますがMySQLでは、文字列エスケープ文字です。

また、構造を使用することもできます。

$today = date("Y-m-d", time() - 7*24*3600); // 7 days

またはSQLの場合:

WHERE date_out <= ADDDATE( NOW(), INTERVAL -7 DAYS)"
于 2012-12-09T20:00:01.153 に答える