简体   繁体   English

如何在PHP中加入两个MySQL查询

[英]How to join two MySQL queries in PHP

How to make a single query by joining both the below queries: 如何通过结合以下两个查询来进行单个查询:

Query 1: 查询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: 查询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. 我还要提及的是,您应该真正在研究准备好的语句,而不是将$from$to直接注入查询中。 You're opening yourself up to potential SQL injection attacks. 您正在向潜在的SQL注入攻击敞开大门。

I highly recommend working with PHP's PDO library over the mysqli_* functions. 我强烈建议通过mysqli_*函数使用PHP的PDO库

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'; 而且我认为您可以将“ LEFT JOIN ”替换为“ INNER JOIN”;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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