2

私はphpとmysqlのプログラミングが初めてで、日付の操作について質問があります。

テーブルに日付を格納する日付フィールドがあります

例えば2013-05-27, 2013-05-24, 2013-05-22

さらに処理するために最新の 3 日間のデータを取得する必要があります。最初に今日の日付を見つけ、見つからない場合は昨日のデータを見つけ、見つからない場合は昨日のデータの前の日付を見つけます。次に、以下のコードがあります。

$date1=date('Y-m-d');
$date1_1="";
$datefound="";
while( $datefound <> ""){
    $date1_1_1 = mysql_query("SELECT * FROM jom_c1 where date ='" .$date1. "'");
    if($date1_1_1){
    $datefound = $date1;
}else{
    $date1 = date('Y-m-d', strtotime($date . ' - 1 day'));
}
}
echo $datefound; 
?>

ただし、ループが実行されていないようです。誰かが私にヒントを与えることができれば幸いです。

4

3 に答える 3

5

SQL を適切に使用することを検討することをお勧めします。つまり、

select * from jom_c1 where date <= curdate() order by date desc limit 3

ループするのではなく。

(日付が見つかるとすぐに停止するため、ループはあまり実行されません)

于 2013-05-26T16:40:42.220 に答える
0

にレコードがある最新の日付を探している場合はjom_c1、次のクエリを試してください。

SELECT * FROM jom_c1 WHERE date <= CURDATE() ORDER BY date DESC LIMIT 1

最新の 3 つの日付を探している場合は、LIMIT 3代わりに を使用しLIMIT 1ます。

PHP コードは次のようになります。

$datefound = "";
$result = mysql_query('SELECT * FROM jom_c1 WHERE date <= CURDATE() ORDER BY date DESC LIMIT 1');
if ($result && mysql_num_rows($result) > 0) {
    $row = mysql_fetch_assoc($result);
    $datefound = $row['date'];
}
echo $datefound;

ただし、非推奨mysql_queryであることに注意してください。


編集: 1 日に複数のレコードがある場合は、次のクエリを使用します。

SELECT DISTINCT date FROM jom_c1 WHERE date <= CURDATE() ORDER BY date DESC LIMIT 1

Distinct は重複レコードを除外します。

于 2013-05-26T16:51:49.067 に答える
0

while ブロックが実行されていない理由は、設定したためです$datefound=""が、条件はwhile ($datefound<>"")です。

于 2013-05-26T16:48:54.083 に答える