【问题标题】:Switch mysql query to compare results切换mysql查询比较结果
【发布时间】:2013-01-03 12:45:47
【问题描述】:

我有一个包含几列的表,其中一个是日期列 (data1)。

使用的mysql查询是

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

然后我们从每一行获取数据,运行一些计算并将其存储为单独的变量。

我现在想将此数据与上周的数据(在同一个表中)进行比较,即通过更改 SELECT 查询。

让我展开……

从表中获取本周数据的查询:

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

现在我们开始提取数据

$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'];
}

(以上只是我们需要运行来演示的计算的一个 sn-p)。

现在我们根据这周的数据显示结果

          <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 查询的情况下实现这一点?

【问题讨论】:

  • 你能举一个更具体的例子吗?
  • 您可以使用一周前的 date_diff() 值重新连接到同一个表(假设索引允许它)。
  • 这取决于你的php查询和计算代码。分离代码并将查询中的数据提取到一个数组中,然后将该数组传递给计算。

标签: php mysql


【解决方案1】:

我认为您可以创建一个用于重复数据的函数并使用一些参数调用它来更改查询,如下所示

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>
}

【讨论】:

  • 谢谢 - 我稍微重新格式化并使用函数来达到我想要的结果。
【解决方案2】:
$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),您可以根据需要进行比较...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-04
    • 2010-12-25
    相关资源
    最近更新 更多