0
<?php
    $query4 = "SELECT bill.agent_id, bill.date, bill.amount, bill.cheque, bill_agents.id,bill_agents.name ".
     "FROM bill, bill_agents ".
     "WHERE bill.agent_id = bill_agents.id AND YEAR(date)  = YEAR(CURDATE()) AND MONTH(date) = MONTH(CURDATE()) ".  
     "ORDER BY bill.date ASC";

    $result4 = mysql_query($query4) or die('Error, query failed1'); 
    if ( mysql_num_rows( $result4 ) > 0 ) {
        mysql_data_seek(  $result4, 0 );
?>

<?php while( $row4 = mysql_fetch_array( $result4, MYSQL_ASSOC ) ) { ?> 

  <tr>
    <td><?php echo $row4['name']; ?></td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <?php } } ?>
</table>

ここまで、このコードはうまく機能しています

ビルテーブルの構造

bill_agents テーブル構造

現在の結果表示 http://i.stack.imgur.com/tMH3P.jpg

私が表示しようとしているのは、1日目から31日目までの毎日の収集レポートが必要な結果です(また、金額と小切手の合計である必要があります)どのように可能ですか

結果は次のようになります http://i.stack.imgur.com/S08or.jpg

"GROUP BY bill.agent_id". また、上記で使用したのと同じ SQL で使用しているときにエラーが発生し、その下に貼り付けられます。

$query4 = "SELECT bill.agent_id, bill.date, bill.amount, bill.cheque, bill_agents.id,bill_agents.name ".
    "FROM bill, bill_agents ".
    "WHERE bill.agent_id = bill_agents.id AND YEAR(date)  = YEAR(CURDATE()) AND MONTH(date) = MONTH(CURDATE()) ".   
    "GROUP BY bill.agent_id".
    "ORDER BY bill.date ASC";
4

2 に答える 2

0

基本的な答えは次のようになります:-

SELECT bill.agent_id, bill.date, bill.amount, bill.cheque, bill_agents.id,bill_agents.name , SUM(bill.amount)". "bill_agents から LEFT OUTER JOIN bill ON bill.agent_id = bill_agents.id ". "WHERE YEAR(date) = YEAR(CURDATE()) AND MONTH(date) = MONTH(CURDATE()) ".
"GROUP BY bill.agent_id". "ORDER BY bill.date ASC

しかし、大きな問題は、エージェントが活動していない日がたくさんあることです。月の日付を生成するテーブルが必要な場合 (これは、月の最初の日に追加された数字の範囲を選択したものである可能性があります)、これをエージェントに対して交差結合して、エージェントと可能性のあるすべての組み合わせを取得します。日。あなたが残したものは、請求書テーブルに対してそれを結合します。

もう少し遊びます。テストされていないため、おそらくいくつかのタイプミスがあり、どの数値を合計したいのかよくわかりませんが、うまくいけばアイデアが得られます.

SELECT bill.agent_id, MonthDays.DayOfMonth, bill.date, bill.amount, bill.cheque, bill_agents.id,bill_agents.name , SUM(bill.amount)
FROM bill_agents
CROSS JOIN (SELECT a.i+b.i*10 AS DaysToAdd, LAST_DAY(NOW()) - (a.i+b.i*10) AS DayOfMonth
FROM integers a, integers b
HAVING DaysToAdd < DAY(LAST_DAY(NOW()))) MonthDays
LEFT OUTER JOIN bill ON bill.agent_id = bill_agents.id AND bill.date = MonthDays.DayOfMonth
GROUP BY bill.agent_id
ORDER BY bill.date ASC, MonthDays.DayOfMonth
于 2013-01-08T09:16:53.930 に答える
0

以下のクエリを試してください。GROUP_CONCATチェック番号と のリストが表示されますsum of all the check amount that belongs to one agent

SELECT 
        bill.agent_id,
        bill.date,
        SUM(bill.amount),
        GROUP_CONCAT(bill.cheque),
        bill_agents.id,
        bill_agents.name
    FROM
        bill,
        bill_agents
    WHERE
        bill.agent_id = bill_agents.id AND YEAR(date) = YEAR(CURDATE()) AND MONTH(date) = MONTH(CURDATE())
    GROUP BY bill.agent_id
    ORDER BY bill.date ASC
于 2013-01-08T09:22:47.703 に答える