比较数据库表中的两个日期是否相等

时间:2015-05-23 13:37:42

标签: mysql date

我是新来的。所以,对我来说很容易。我有一个名为'data'的表,其中一列是以YYYY-MM-DD格式存储的'date'。这是我一直在研究的代码。基本上,我想要做的是比较我表中存储的两个日期是否相等。但是,每次运行代码时,我都会收到错误:未定义的偏移量,代码为$ lisdate [$ i + 1]。如何比较表中存储的日期?谢谢。

我的代码

$sth2 = mysql_query("SELECT * FROM data WHERE dest_name='www.myren.net.my'");

while($rowstemp = mysql_fetch_assoc($sth2))
{
   $lisdate[] = $rowstemp['date'];  
   $lisaverage[] = $rowstemp['avg_rtt'];
}

$rows = mysql_num_rows($sth2);
$addAverage[0] = $lisaverage[0];
$numbers = 0;
$j = 0;


for($i = 0; $i<$rows; $i++)
{
   if($lisdate[$i] == $lisdate[$i+1])
   {
      $addAverage[$j] = $addAverage[$j] + $lisaverage[$i+1];
   }
   else 
   {
      $j++;
      $numbers = $numbers +1;
   }
}

2 个答案:

答案 0 :(得分:2)

戈登说得对。你的for循环超出了数组的末尾,因为你正在处理连续的行对。将其更改为阅读; $i < $rows - 1;以更正此问题。

但是,你有另一个问题。除非您的查询包含ORDER BY子句,否则结果集中的SQL行具有不可预测的顺序。如果没有该子句的这些行按date按升序显示,那就是运气不好。将ORDER BY date放入查询中。

答案 1 :(得分:0)

问题中的代码试图实现的目标尚不完全清楚。

(正如Ollie在他的回答中指出的那样,重复一遍:如果查询中有ORDER BY子句,那么MySQL返回行的顺序将保证 ONLY 。 “重复日期”检查在代码中执行的只会检测到“重复”日期值,如果它出现在连续的行上。)

我们看到代码使用查询返回的dateavg_rtt列值加载了几个数组。然后在数组上有一些操作...最终结果将是另一个不清楚该rigmarole的实际意图是什么,它实际上试图实现什么。

如果有任何行看起来会有另一个数组......如果找不到“重复”的日期值,它将会有一个元素(值为rtt_avg来自第一行),$numbers将设置为原始数组中的元素数。

如果找到“重复”的日期值,代码的结果对我来说似乎很奇怪,一个人口稀少的数组。为什么呢?

就个人而言,我希望获得规范的实际声明,让数据库为我做处理,而不是通过两个数组。

如果我们想要的是一组没有重复日期值的值,我会使用GROUP BY和一些聚合,例如:

 SELECT d.dest_name
      , d.date
      , AVG(d.avg_rtt)            AS avg_avg_rtt
      , MAX(d.avg_rtt)            AS max_avg_rtt
      , MIN(d.avg_rtt)            AS min_avg_rtt
      , SUM(d.avg_rtt)            AS sum_avg_rtt
      , COUNT(1)                  AS cnt
      , COUNT(d.avg_rtt)          AS cnt_avg_rtt
      , COUNT(DISTINCT d.avg_rtt) AS cnt_distinct_avg_rtt
   FROM data d
  WHERE d.dest_name = 'www.myren.net.my'
  GROUP
     BY d.dest_name
      , d.date
  ORDER
     BY d.dest_name
      , d.date

如果我只查找不同date值的计数,例如$numbers将包含的值,那么只需:

 SELECT d.dest_name
      , COUNT(DISTINCT d.date) AS cnt_distinct_date
   FROM data d
  WHERE d.dest_name = 'www.myren.net.my'
  GROUP BY d.dest_name
  ORDER BY d.dest_name

“循环数组”,原始查询只是看起来像实现结果的奇怪方式,无论结果是什么。