有没有办法优化这个mysql查询。。。?

有没有办法优化这个mysql查询。。。?,mysql,query-optimization,Mysql,Query Optimization,喂,我有这两张桌子 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

喂,我有这两张桌子

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
现在,我需要从这两个表中获得以下详细信息

给定一个特定日期,例如2010年3月23日,在该特定日期已付款的每家酒店的总金额。 根据酒店名称订购日期为2010年3月23日的所有行 示例输出如下所示

+------------+------------+------------+---------------+
| 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生成

现在我使用两个独立的查询:一个是根据酒店名称分组的金额和佣金的总和。下一步是为表中具有该日期的每个条目获取单独的行。当然,这是因为对计算总和的记录进行分组只会为每个酒店返回一行金额总和


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
有没有一种方法可以将这两个查询组合成一个查询,并以更优化的方式执行操作

希望我说的很清楚。。谢谢你的时间和回复

编辑:也添加了查询

查询以获取总和

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
我将两个查询返回的行添加到两个单独的临时表中,然后使用php打印该表,如上图所示


编辑2:还有,如果有人给这篇文章推荐一个更好的标题,我会很感激的

这是报表编写器的领域,或编程语言中的等效逻辑。

是。。。当然,用这种结构打印表格是编程语言的逻辑领域。。我只是想知道应该打印在表中的详细信息是否可以通过一个查询来检索…@xorlev:编辑帖子以添加查询。。。谢谢