2010-03-31 147 views
0

说,我得到了这两个表....有没有办法来优化这个mysql查询...?

Table 1 : Hotels 
    hotel_id hotel_name 
     1   abc 
     2   xyz 
     3   efg 

Table 2 : Payments 
    payment_id  payment_date  hotel_id  total_amt comission 
     p1   23-03-2010   1   100   10 
     p2   23-03-2010   2   50   5 
     p3   23-03-2010   2   200   25 
     p4   23-03-2010   1   40   2 

现在,我需要从两个表

  1. 给定一个特定日期(比如得到以下细节,23-03- 2010年),在该特定日期支付的每家酒店的总金额总和。
  2. 所有这些都23-03-2010根据酒店名称

示例输出如下下令日期的行...

+------------+------------+------------+---------------+ 
| hotel_name | date  | total_amt | commission | 
+------------+------------+------------+---------------+ 
| * abc  | 23-03-2010 |  140 |  12  | 
+------------+------------+------------+---------------+ 
|+-----------+------------+------------+--------------+| 
|| paymt_id | date  | total_amt | commission || 
|+-----------+------------+------------+--------------+| 
|| p1  | 23-03-2010 |  100 |  10  || 
|+-----------+------------+------------+--------------+| 
|| p4  | 23-03-2010 |  40  |  2  || 
|+-----------+------------+------------+--------------+| 
+------------+------------+------------+---------------+ 
| * xyz  | 23-03-2010 |  250 |  30  | 
+------------+------------+------------+---------------+ 
|+-----------+------------+------------+--------------+| 
|| paymt_id | date  | total_amt | commission || 
|+-----------+------------+------------+--------------+| 
|| p2  | 23-03-2010 |  50  |  5  || 
|+-----------+------------+------------+--------------+| 
|| p3  | 23-03-2010 |  200 |  25  || 
|+-----------+------------+------------+--------------+| 
+------------------------------------------------------+ 

表的样本上面说已要打印...

的想法是第一个显示每家酒店的合并细节,而当“*”旁边点击的付款细节击穿将变得可见酒店的名字......但这可以通过一些jquery完成.. !!!表本身可以用php生成...

现在我使用了两个单独的查询:一个获得金额和佣金按酒店名称分组的总和。接下来是获取表中具有该日期的每个条目的单独行。这是当然的,因为它把记录计算总和()返回每个酒店与金额的总和只有一排...

有没有办法将这两个查询组合成一个单一的一个并以更优化的方式进行操作......?

希望我是清楚..感谢您的时间和答复...

编辑:添加查询过

  1. 查询得到的总和()

    
    SELECT DATE_FORMAT($payments.payment_date, '%d-%m-%Y %T') as payment_date, 
         $payments.payment_id AS payment_id, 
         $payments.payment_amount AS payment_amount, 
         $payments.agent_commision AS commision, 
         $payments.comm_percentage AS percentage, 
         $hotels.hotel_name AS hotel 
         SUM($payments.payment_amount) AS tot_amt 
         SUM($payments.agent_commision) AS tot_ag_comsn 
    FROM $payments 
    JOIN $hotels 
    ON $payments.hotel_id = $hotels.hotel_id 
    WHERE DATE_FORMAT(payment_date,'%d-%m-%Y') = '$date_report' 
    GROUP BY $payments.hotel_id 
    ORDER BY $payments.payment_date ASC 
    

  2. 查询以获取单个行

    
    SELECT DATE_FORMAT($payments.payment_date, '%d-%m-%Y %T') as payment_date, 
          $payments.payment_id AS payment_id, 
          $payments.payment_amount AS payment_amount, 
          $payments.agent_commision AS commision, 
          $payments.comm_percentage AS percentage, 
          $hotels.hotel_name AS hotel 
    FROM $payments 
    JOIN $hotels 
    ON $payments.hotel_id = $hotels.hotel_id 
    WHERE DATE_FORMAT(payment_date,'%d-%m-%Y') = '$date_report' 
    GROUP BY $payments.payment_date 
    ORDER BY $payments.payment_date ASC 
    

    我加入由两个查询返回的行中的两个独立的临时表,然后使用PHP来打印表,如上图所示...

编辑2:并且也明白,如果有人提出了一种这个岗位更好的标题...;)

+0

发布查询? – Xorlev 2010-03-31 06:42:38

+0

@xorlev:编辑后添加查询过...谢谢... – SpikETidE 2010-03-31 06:44:32

回答

0

这是报告的作家在编程语言的域名,或等效逻辑。

+0

是...打印表格与结构,当然,逻辑的编程语言的域名。我只是想知道如果应该在表中打印的细节可以通过单个查询来检索.... – SpikETidE 2010-03-31 06:42:22

相关问题