[英]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.