0

私は 3 つの MySQL クエリを持っています。

$q1 = "SELECT id,date,quantity1,quantity2,total FROM test WHERE type='pencil' AND MONTH(date)='$month' AND YEAR(date)='$year' ORDER BY id";
$r1 = mysql_query($q1);

$q2 = "SELECT SUM(total) AS stotal FROM test WHERE type='pencil' AND MONTH(date)='$month' AND YEAR(date)='$year' GROUP BY id ORDER BY id";
$r2 = mysql_query($q2);

$q2 = "SELECT AVG(ROUND(total)) AS atotal FROM test WHERE type='pencil' AND MONTH(date)='$month' AND YEAR(date)='$year' GROUP BY id ORDER BY id";
$r2 = mysql_query($q2);

これら3つのクエリをどのように組み合わせることができますか? そのため、1 つの while ループで使用できます。そのように、whileループで複数のステートメントを試しました;

$lastr = '';
while ((list($id, $date, $q1, $q2, $total) = mysql_fetch_row($r1)) && ($row =  mysql_fetch_array($r2)) && ($row =  mysql_fetch_array($r3)))  {
if ($lastr != $id ) {
    if ($lastr != '') {
        // output row
    echo "<tr><th>$lastr</th><th>$stotal</th><th>$atotal</th><td>";
        echo join('</td><td>', $rowdata) . "</td></tr>\n";
    }
    $rowdata = $empty;
    $lastr = $id;
}
$rowdata[$rdate]  = $q1 .= '</td><td>' . $q2 .= '</td><td>' . $total;
}

最初のクエリのみを使用すると、すべてがテーブルに出力されますが、2 つの追加の「and」ステートメントを追加すると、出力が制限されます。ところで、while ループで最初のクエリを使用する場合にのみ機能する動的な列と行を作成しようとしています。ありがとう


感謝します: raheel shan

私の質問に対する答えは次のとおりです。

SELECT
  t.id,
  t.date,
  t.quantity1,
  t.quantity2,
  t.total,
  lt.stotal,
  lt.atotal
FROM test as t
  left join (select
           id,
           SUM(total)   AS stotal,
           AVG(ROUND(total)) AS atotal
         from test
         WHERE type = 'pencil'
         AND MONTH(date) = '$month'
         AND YEAR(date) = '$year'
         GROUP BY id) as lt
    on lt.id = t.id
WHERE type = 'pencil'
    AND MONTH(date) = '$month'
    AND YEAR(date) = '$year'
ORDER BY id
4

4 に答える 4

0
$q1 = "SELECT id,date,quantity1,quantity2,total,SUM(total) AS stotal,AVG(ROUND(total)) AS atotal FROM test WHERE type='pencil' AND MONTH(date)='$month' AND YEAR(date)='$year' ORDER BY id";
$r1 = mysql_query($q1);
于 2013-01-30T05:38:40.850 に答える
0

Uはこのように組み合わせることができます........

SELECT id,date,quantity1,quantity2,total,(SELECT SUM(total)  FROM test WHERE type='pencil' AND MONTH(date)='$month' AND YEAR(date)='$year' GROUP BY id ORDER BY id) as sum_total,(SELECT AVG(ROUND(total))  FROM test WHERE type='pencil' AND MONTH(date)='$month' AND YEAR(date)='$year' GROUP BY id ORDER BY id") as avg_total FROM test WHERE type='pencil' AND MONTH(date)='$month' AND YEAR(date)='$year' ORDER BY id";
于 2013-01-30T05:33:05.273 に答える
0

この単一の派生クエリを使用できます

SELECT
  t.id,
  t.date,
  t.quantity1,
  t.quantity2,
  t.total,
  lt.stotal,
  lt.atotal
FROM test as t
  left join (select
           id,
           SUM(total)   AS stotal,
           AVG(ROUND(total)) AS atotal
         from test
         WHERE type = 'pencil'
         AND MONTH(date) = '$month'
         AND YEAR(date) = '$year'
         GROUP BY id) as lt
    on lt.id = t.id
WHERE type = 'pencil'
    AND MONTH(date) = '$month'
    AND YEAR(date) = '$year'
ORDER BY id

または、これはより単純です

SELECT
  t.id,
  t.date,
  t.quantity1,
  t.quantity2,
  t.total,
  SUM(lt.stotal) AS stotal,
  AVG(ROUND(lt.atotal)) AS atotal
FROM test as t
  left join test as lt
    on lt.id = t.id
WHERE type = 'pencil'
    AND MONTH(date) = '$month'
    AND YEAR(date) = '$year'
ORDER BY id
于 2013-01-30T06:20:45.113 に答える
0

このようにクエリを一緒に追加できます

$q1 = "SELECT id,date,quantity1,quantity2,total,AVG(ROUND(total)) AS stotal, AVG(ROUND(total)) AS atotal FROM test WHERE type='pencil' AND MONTH(date)='$month' AND YEAR(date)='$year' GROUP BY  id,date,quantity1,quantity2,total,stotal,atotal ORDER BY id";
$r1 = mysql_query($q1);

group by 句が必要な理由は、select に集計関数が存在するため、group by ステートメントの外で非集計 select を使用できないためです。

お役に立てれば。

于 2013-01-30T05:35:42.950 に答える