MySQL - 比较列中的所有值并写入另一列

时间:2013-11-18 23:57:09

标签: php mysql sql

我需要创建一个脚本,将数据库中的一个字段(存储日期,类型为“TEXT”,并且无法更改DATE)与当前服务器日期进行比较。

日期编码如下“1380571547”,因此我需要使用strftime()对其进行解码。例如,使用strftime解码的此字段对应于此"Sep-30-2013, 22:05"

我需要的是将这些字段与当前日期进行比较,并根据该条件在另一个字段中写下“过期”字样。

为实现这一目标,我制作了这段代码:

<?php
require("connection.php");

$today = strftime('%b-%d-%Y, %H:%M');
$exp_date = mysql_query("SELECT numbers FROM date");

while($row = mysql_fetch_array($exp_date))
{
echo (strftime ( '%b-%d-%Y, %H:%M', $row ['numbers'])). "<br />";
}


if ($exp_date < $today) {
 $sql = "INSERT INTO date (changed) VALUES ('EXPIRED')";
 $result = mysql_query($sql);
 echo "ADDED!";

} 

?>

但是,这段代码不起作用,有人可以帮帮我吗?

3 个答案:

答案 0 :(得分:1)

PHP不是我的强项,但在我看来,条件是在数组上进行比较,

IE:

if ($exp_date < $today) // will always be false.

您的代码可能需要看起来更像这样。

while($row = mysql_fetch_array($exp_date))
{
   if ($row[0] < $today) 
   {
      $sql = "Update date set changed = VALUE where rowid = rowid";
      $result = mysql_query($sql);
      echo "ADDED!";
    } 
}

说过我可能会在SQL中使用case语句进行比较和更新,

Update Date 
     set changed = case when number > ExpiryDate 
                        then "Expired"  
                        else "Current" 
                        end

答案 1 :(得分:0)

您可以在一个查询中完成所有这些操作:

UPDATE `date` set `changed`='Expired' where date(now()) > date(from_unixtime(`numbers`))

但这不是您的代码尝试做的事情。您的第二个块似乎是在新行中插入单词Expired,而不是更新任何内容。

请注意,表名date应包含在反引号中以避免与MySQL关键字发生任何可能的冲突

答案 2 :(得分:0)

我不理解带插入的第二个代码块。我会在循环中做一个更新。但是如果你要这样做,它可能会在一个组合的更新声明中完成。