2013-01-03 91 views
1

我有一个表包含几列,其中之一是日期列(data1)。切换mysql查询来比较结果

使用MySQL查询是

SELECT * from leads WHERE data1 between date_sub(now(),INTERVAL 1 WEEK) and now() 

然后,我们从各行取数据,运行一些计算和存储这个作为一个独立的变量。

我现在想比较这些数据与上周的数据(在同一个表中),即通过改变SELECT查询。

让我扩大...

查询从表中获取该周数据:通过提取数据

$result = mysql_query($sqld) or die(mysql_error()); 

$num_rows = mysql_num_rows($result); 

while($row = mysql_fetch_array($result)) 
{ 
     $referred = $referred + $row['referred']; 
     $invalidated = $invalidated + $row['invalidated']; 
     $tobequalified = $tobequalified + $row['tobequalified']; 
} 

$sqld = "SELECT * from leads WHERE data1 between date_sub(now(),INTERVAL 1 WEEK) and now()"; 

现在我们运行(以上只是一个我们需要运行演示的片段)。

现在我们会根据这个星期的数据

  <h4>Totals for this week</h4> 

      <table class="table stat-table"> 
       <tbody> 
        <tr> 
         <td class="value"><? echo $num_rows; ?></td> 
         <td class="full">Total leads</td> 
        </tr> 
        <tr> 
         <td class="value"><? echo $referred; ?></td> 
         <td class="full">Referred</td> 
        </tr> 
        <tr> 
         <td class="value"><? echo $invalidated; ?></td> 
         <td class="full">Invalidated</td> 
        </tr> 
        <tr> 
         <td class="value"><? echo $tobequalified; ?></td> 
         <td class="full">To be qualified</td> 
        </tr> 

       </tbody> 
      </table> 

我想现在变化$ SQLD查询以上选择表中的最后一周落入行,运行结果上面的计算结果相同,并在下面显示结果,以便我们可以比较两者。

  <h4> Totals for last week</h4> 


      <table class="table stat-table"> 
       <tbody> 
        <tr> 
         <td class="value"><? echo $num_rows; ?></td> 
         <td class="full">Total leads</td> 
        </tr> 
        <tr> 
         <td class="value"><? echo $referred; ?></td> 
         <td class="full">Referred</td> 
        </tr> 
        <tr> 
         <td class="value"><? echo $invalidated; ?></td> 
         <td class="full">Invalidated</td> 
        </tr> 
        <tr> 
         <td class="value"><? echo $tobequalified; ?></td> 
         <td class="full">To be qualified</td> 
        </tr> 

       </tbody> 
      </table> 

有没有办法实现这一点,而无需复制所有内容并更改$ sqld查询?

+0

你能举一个更具体的例子吗? – eggyal

+0

您可以使用一个星期前的date_diff()值回到同一个表(假设索引允许)。 – ethrbunny

+0

这取决于你的php查询和计算代码。分离代码并将查询中的数据提取到数组中并将该数组传递给计算。 –

回答

0

我想你可以repeting数据创建一个函数,并与一些参数调用它改变下面的查询

somefunction("Previous"); 
somefunction(); 

function somefunciton($query = "current") { 
    if($query == "Current") 
     $sqld = "SELECT * from leads WHERE data1 between date_sub(now(),INTERVAL 1 WEEK) and now()"; 
    else 
     $sqld = "SELECT * from leads WHERE data1 between date_sub(now(),INTERVAL 2 WEEK) and (now(),INTERVAL 1 WEEK)"; 
    $result = mysql_query($sqld) or die(mysql_error()); 

    $num_rows = mysql_num_rows($result); 

    while($row = mysql_fetch_array($result)) 
    { 
      $referred = $referred + $row['referred']; 
      $invalidated = $invalidated + $row['invalidated']; 
      $tobequalified = $tobequalified + $row['tobequalified']; 
    } 
    <h4>Totals for this week</h4> 

     <table class="table stat-table"> 
     <tbody> 
      <tr> 
      <td class="value"><? echo $num_rows; ?></td> 
      <td class="full">Total leads</td> 
      </tr> 
      <tr> 
      <td class="value"><? echo $referred; ?></td> 
      <td class="full">Referred</td> 
      </tr> 
      <tr> 
      <td class="value"><? echo $invalidated; ?></td> 
      <td class="full">Invalidated</td> 
      </tr> 
      <tr> 
      <td class="value"><? echo $tobequalified; ?></td> 
      <td class="full">To be qualified</td> 
      </tr> 

     </tbody> 
     </table> 
} 
+0

谢谢 - 我稍微重新格式化了这个,并使用函数来实现我正在寻找的结果。 – juselliott

0
$result1 = mysql_query("SELECT * FROM leads"); 
$result2 = mysql_query("SELECT * FROM other table"); 
$arr1 = new Array(); 
$arr2 = new Array(); 

while($row = mysql_fetch_array($result, MYSQL_ASSOC)) 
    { 
    $arr1['FirstName'] = $row['your column name']; 
    } 

while($row = mysql_fetch_array($result, MYSQL_ASSOC)) 
    { 
    $arr2['FirstName'] = $row['your column name']; 
    } 

现在你有两个数组($ ARR1美元ARR2)和你比较按你想...