Скажите, у меня есть эти две таблицы ....
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
Теперь мне нужно получить следующие данные из двух таблиц
- Учитывая конкретную дату (скажем, 23-03-2010), сумму total_amt для каждого отеля, за который был произведен платеж в эту конкретную дату.
- Все строки с датой 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 ...
Сейчас я использую два отдельных запроса: один, чтобы получить сумму и комиссию, сгруппированную по названию отеля. Следующим является получение отдельной строки для каждой записи, имеющей эту дату в таблице. Это, конечно, потому что группировка записей для расчета sum () возвращает только одну строку для каждого отеля с суммой сумм ...
Есть ли способ объединить эти два запроса в один и выполнить операцию более оптимизированным способом ... ??
Надеюсь, я проясню .. Спасибо за ваше время и ответы ...
РЕДАКТИРОВАТЬ: добавлены запросы слишком
Запрос на получение суммы ()
<code>
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
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: И также, спасибо, если кто-то предложит лучший заголовок для этого поста ...;)