php - 简化多个嵌套的 MYSQL 选择查询

标签 php mysql

我很难理解嵌套这些 SELECT 以便仅使用一个查询来提取我需要的数据!

我需要在组合表中查找并返回一行,该行的最新日期早于加载表中的加载日期。

这可行,但我应该能够在一个查询中完成它:

$sql = "SELECT * FROM loads JOIN generators ON gen_key =gen_id ";
$sql.=" WHERE field_id= ".$fieldcode;
$sql.=" ORDER BY load_date DESC,load_time DESC ";
$result=mysqli_query($db_connection,$sql); 
while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) { 
$sql2 = "SELECT * FROM (SELECT * FROM composition WHERE comp_date <=   '".$row[load_date]."'  AND gen_id =".$row[gen_id]." ORDER BY comp_date ASC) as T1 ORDER BY comp_date DESC LIMIT 1";
$result2=mysqli_query($db_connection,$sql2); 
$row2 = mysqli_fetch_array($result2, MYSQLI_ASSOC);
// Output $row[] and $row2[] data
}

感谢您的帮助!

最佳答案

如果您希望最大限度地减少从 PHP 到 SQL 的查询,您可以使用存储过程。 基本上,它们很快就能让你头脑清醒。如果您遵循有关该主题的快速教程,您很快就会进入(我刚刚做到了): http://www.mysqltutorial.org/mysql-stored-procedure-tutorial.aspx

在这种情况下,您最终只需使用一个或多个参数从 PHP 到 SQL 调用一个过程一次,从而大大减少查询。

例如,您可以将上述 SQL 调用(或多或少与您的代码中的情况相同)包装在存储过程中,例如 $sql = "call getGenerators(".$gen_id.");"; 结果将是您在存储过程中选择要返回的任何内容。

存储过程非常擅长获取数据,就像您的情况一样,但不太擅长执行硬逻辑(这不是)。

希望有帮助。

关于php - 简化多个嵌套的 MYSQL 选择查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26552328/

相关文章:

php - 动态数组再次覆盖

php - 通过 UI 输入在表中添加新列

javascript - JavaScript 中的 PHP preg_replace

php - 如何编辑全文搜索以查找确切的单词?

mysql - 编写查询来计算平均收入但错误地得到一组?

mysql - 上一个画廊的照片

php - 表单数据没有在按钮上提交单击到 PHP 文件

php - Mysql匹配转义邮箱

php - 通过 AJAX 发布在 PHP 中回显 JSON 对象

MYSQL:SELECT 语法错误...INTO OUTFILE