簡體   English   中英

如何獲取今天日期的 MySQL 表字段的總和?

[英]How can i get the sum of a MySQL table's field for today date?

我正在使用 PHP 構建一個簡單的購物車,根據標題,我想獲得ordersprice字段的總和(總收入),但僅限於今天。

我創建了以下函數,但我可以獲得最后一天的總收入,而不是今天。 例如,如果今天是星期五,最后一天有收入是星期一(180 美元),那么我得到的結果是星期一:180 美元,而不是星期五:0 美元,這正是我想要的。

這是我現在擁有的:

    public function getTotalEarningsToday()
    {
        $records = (new Query())->select([
                'sum(price) as count',
                "from_unixtime(updated_at, '%Y-%m-%d') as day",
                 ])
            ->from(Orders::tableName())
            ->orderBy('day desc')
            ->groupBy('day')
            ->indexBy('day')
            ->limit(1)
            ->where(['status' => Orders::STATUS_COMPLETED])
            ->all();

        return $records;
    }

我試圖將當前日期存儲在變量中並執行以下操作:

   public function getTotalEarningsToday()
    {
        $todayDate = date("d.m.Y H:i");
        $records = (new Query())->select([
                'sum(price) as count',
                "from_unixtime(updated_at, '$todayDate') as day",
                 ])
            ->from(Orders::tableName())
            ->orderBy('day desc')
            ->groupBy('day')
            ->indexBy('day')
            ->limit(1)
            ->where(['status' => Orders::STATUS_COMPLETED])
            ->all();

        return $records;
    }

現在我得到了數組中的今天日期,但我仍然無法獲得正確的總收入記錄:

Array ( [count] => 61.35 [day] => 21.02.2022 09:18 ) )

它應該是:

  Array ( [count] => 0 [day] => 21.02.2022 09:18 ) )

任何幫助將不勝感激。

我認為在這種情況下你應該只使用一天,因為時間可能會有所不同。 如果您的時間以 date() 格式存儲,您可以這樣做:

$todayDate = strtotime(date("d.m.Y"));
$records = (new Query())->select([
        'sum(price) as count',
        'updated_at as day',
])
->from(Orders::tableName())
->orderBy('day desc')
->groupBy('day')
->indexBy('day')
->limit(1)
->where([
     'AND',
     'status' => Orders::STATUS_COMPLETED, 
     'updated_at' => $tadayDate]
)->all();

或者,像往常一樣我們在表中有created_atupdated_at字段, updated_at可能為空,這種情況下,合理的會使用created_at字段查詢結果:

$todayDate = strtotime(date("d.m.Y"));
$records = (new Query())->select([
        'sum(price) as count',
        'created_at as day',
])
->from(Orders::tableName())
->orderBy('day desc')
->groupBy('day')
->indexBy('day')
->limit(1)
->where([
      'AND',
      'status' => Orders::STATUS_COMPLETED, 
      'created_at' => $tadayDate]
)->all();

或者使用BETWEEN作為日期,就像評論中提到的那樣。

updated_at >= '2022-02-21 00:00' AND updated_at <= '2022-02-21 23:59'

當您只想獲得一天的總和時,無需使用 group by、order by、index by 或 limit。

$sum = Orders::find()
    ->where(new \yii\db\Expression(
        'DATE(FROM_UNIXTIME(`updated_at`)) = :today',
        [':today' => date('Y-m-d')]
    ))->sum('price');

這個對我有用


$today = date("Y-m-d");
$queue =  Orders::find()
        ->select(['SUM(price) as total'])
        ->where(['DATE(created_at)' => $today])
        ->one();
return $queue['total'];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM