1

これらの 4 つのクエリをエージェントごとに 3 回繰り返しました。これらのクエリを単純化/結合する方法はありますか? 合計にwhileループを使用してもかまいません。変更されるのは日付だけです。

$john_week_total  = mysql_result(mysql_query("SELECT SUM(tp) FROM info WHERE type='life' AND date >= '$monday' AND rvp ='john smith'"),0);
$john_month_total = mysql_result(mysql_query("SELECT SUM(tp) FROM info WHERE type='life' AND date >= '$this_month' AND rvp ='john smith'"),0);
$john_year_total  = mysql_result(mysql_query("SELECT SUM(tp) FROM info WHERE type='life' AND date >= '$this_year' AND rvp ='john smith'"),0);
$john_total       = mysql_result(mysql_query("SELECT SUM(tp) FROM info WHERE type='life' AND rvp ='john smith'"),0);
4

2 に答える 2

0

SUMフィールドリストに複数のアグリゲーターを含めることができます

SELECT
    SUM(IF(date >= '$monday' AND rvp = 'john smith'), tp, 0) AS john_week_total
    SUM(IF(date >= '$this_month' AND rvp = 'john smith'), tp, 0) AS john_month_totalo
    -- etc.
FROM
    info
WHERE
    type = 'life'

あなたのコードはインジェクションに対して脆弱です。PDO または mysqli で適切にパラメータ化されたクエリを使用する必要があります

于 2013-09-04T17:16:53.747 に答える
0

この種のクエリは役に立ちますか?

select
   sum(case when date >= '$monday' then tp else 0 end) as weektotal,
   sum(case when date >= '$this_month' then tp else 0 end) as monthtotal,
   sum(case when date >= '$this_year' then tp else 0 end) as yeartotal,
   sum(tp) as alltotal
from info
where type = 'life'
and rvp = 'john smith'
于 2013-09-04T17:17:11.020 に答える