Cory,

One way to lose the duplicate queries is to assign the count per pnr.id to a user var, and calculate via that value:

SELECT
 pnr.ID AS ID_pnr,
 pnr.reservationdatetime,
 pnr.conf_number,
 pnr.created_by,
 ( SELECT @pp_cnt := COUNT(1)
   FROM pnr_passengers pp
   WHERE pp.ID_pnr = pnr.ID
 ) AS pp_count,
 GROUP_CONCAT(pp.name_last,', ',pp.name_first
              ORDER BY name_last DESC SEPARATOR '<br>') AS names,
 ( SELECT SUM( pf.base_fare * ( @pp_cnt )
   FROM pnr_fares pf
   WHERE pf.ID_pnr=pnr.ID
 ) AS base_fare,
 ( SELECT SUM( pf.tax * ( @pp_cnt )
   FROM pnr_fares pf
   WHERE pf.ID_pnr=pnr.ID
 ) AS tax ,
 ( SELECT SUM(psf.segfee_amount * ( @pp_cnt )
   FROM pnr_segments_fees psf
   INNER JOIN pnr_segments pss ON psf.ID_segments=pss.ID
   WHERE psf.segfee_code='XF' AND pss.ID_pnr=pnr.ID ) AS xf ,
 ( SELECT SUM(amount_value) service_fees
   FROM pnr_service_fees
   WHERE ID_pnr=pnr.ID
 ) AS services ,
 ( SELECT SUM(amount)
   FROM pnr_payments_credits
   WHERE ID_pnr=pnr.ID AND bln_payment='1' AND transaction_type='sale'
 ) AS payments,
 ( SELECT SUM(amount)
   FROM pnr_payments_credits
   WHERE ID_pnr=pnr.ID AND bln_payment='1' AND transaction_type='credit'
 ) AS credits
FROM pnr
INNER JOIN pnr_passengers pp ON pnr.ID=pp.ID_pnr
WHERE pnr.reservationdatetime>='2000-05-29 00:00:00'
 AND pnr.reservationdatetime<='2006-05-29 23:59:59'
GROUP BY pnr.ID
ORDER BY reservationdatetime;


PB


--
No virus found in this outgoing message.
Checked by AVG Free Edition.
Version: 7.1.394 / Virus Database: 268.7.4/351 - Release Date: 5/29/2006


--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]

Reply via email to