简体   繁体   中英

How to join two MySQL queries in PHP

How to make a single query by joining both the below queries:

Query 1:

$sql = "SELECT total_ce FROM mfb_agent_status_summary AS agent LEFT JOIN mfb_servicelog AS service ON agent.sl_id = service.sl_id WHERE service.h_id LIKE ('".$value[$i]."')  AND service_add_date >= DATE_FORMAT('" . $from . "', '%Y-%m-%d') AND service_add_date <=  DATE_FORMAT('" . $to . "', '%Y-%m-%d')";

Query 2:

$query="SELECT DATE_FORMAT(service_add_date, '%d/%b/%y'), DATE_FORMAT(scan_date, '%d/%b/%y'), DATE_FORMAT(ftp_date, '%d/%b/%y'),no_of_cases_reported,no_of_cases_received,case_count_diff, DATEDIFF(ftp_date, service_add_date) FROM mfb_servicelog WHERE h_id LIKE ('".$value[$i]."') AND service_add_date >= DATE_FORMAT('" . $from . "', '%Y-%m-%d') AND service_add_date <=  DATE_FORMAT('" . $to . "', '%Y-%m-%d')";

Thank You!

I'm making some assumptions about your schema here, but try something like this:

SELECT agent.total_ce,
       DATE_FORMAT(service.service_add_date, '%d/%b/%y'),
       DATE_FORMAT(service.scan_date, '%d/%b/%y'),
       DATE_FORMAT(service.ftp_date, '%d/%b/%y'),
       service.no_of_cases_reported,
       service.no_of_cases_received,
       service.case_count_diff,
       DATEDIFF(service.ftp_date, service.service_add_date)

FROM mfb_agent_status_summary AS agent
     LEFT JOIN mfb_servicelog AS service ON agent.sl_id = service.sl_id

WHERE service.h_id LIKE ('".$value[$i]."') AND
      agent.service_add_date >= DATE_FORMAT('" . $from . "', '%Y-%m-%d') AND
      agent.service_add_date <=  DATE_FORMAT('" . $to . "', '%Y-%m-%d')

I'd also like to mention that you should really be looking into prepared statements instead of injecting $from and $to directly into your query. You're opening yourself up to potential SQL injection attacks.

I highly recommend working with PHP's PDO library over the mysqli_* functions.

So my guess is:

$sql = "SELECT 
      agent.total_ce,
      service.*
   FROM mfb_agent_status_summary AS agent 
   LEFT JOIN (
      SELECT 
        DATE_FORMAT(service_add_date, '%d/%b/%y'), 
        DATE_FORMAT(scan_date, '%d/%b/%y'), 
        DATE_FORMAT(ftp_date, '%d/%b/%y'),
        no_of_cases_reported,
        no_of_cases_received,
        case_count_diff, 
        DATEDIFF(ftp_date, service_add_date) 
      FROM mfb_servicelog 
      WHERE h_id LIKE ('".$value[$i]."') 
        AND service_add_date >= DATE_FORMAT('" . $from . "', '%Y-%m-%d') 
        AND service_add_date <=  DATE_FORMAT('" . $to . "', '%Y-%m-%d')
   ) AS service 
   ON agent.sl_id = service.sl_id";

And I think you may replace LEFT JOIN with 'INNER JOIN';

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM