MySQL+;php:查询中每一行的新查询?
在我所在的地方,这是一个经常出现的话题。对于返回行列表的查询类型,我们通常希望执行进一步的查询,以收集有关该特定行的更多信息,这通常包括本身返回行列表的查询。这方面的一个例子是订单系统,它返回客户列表,每个客户的“行”也可能显示其订单列表(可能在弹出对话框中) 一般而言,以下做法是否“更好”:MySQL+;php:查询中每一行的新查询?,php,mysql,web-applications,Php,Mysql,Web Applications,在我所在的地方,这是一个经常出现的话题。对于返回行列表的查询类型,我们通常希望执行进一步的查询,以收集有关该特定行的更多信息,这通常包括本身返回行列表的查询。这方面的一个例子是订单系统,它返回客户列表,每个客户的“行”也可能显示其订单列表(可能在弹出对话框中) 一般而言,以下做法是否“更好”: 在可能的情况下,使用GROUP\u CONCAT执行一个查询,并以编程方式分割结果(返回的串联长度有限制) 对每行执行“子查询”,同时循环遍历“父查询”的结果 执行一次“父查询”以返回客户列表,并使用关键
GROUP\u CONCAT
执行一个查询,并以编程方式分割结果(返回的串联长度有限制)执行一次“订单”查询以匹配从上一次查询返回的客户ID。循环浏览客户查询的结果,我们可以查看订单查询中是否存在客户ID,并显示匹配的订单
FETCH\u ASSOC
等机制是如何工作的,但欢迎提供任何建议 我认为3号更好。
我建议获得所有客户,然后列出该客户的所有订单(客户ID在(…)中),然后根据需要将订单发送给php端的正确客户
这样,您只得到两个包含所有信息的查询,并且可以避免分派部分(取决于此查询之后要执行的逻辑)
记住,查询的大部分开销来自查询本身(传输查询,然后返回数据)
数据库在搜索和连接等方面进行了高度优化,所以选择数据不是瓶颈(直到达到非常高的数字),所以这是另一个解决方案
此外,如果您选择使用中的索引,数据库甚至不必搜索术语,它只需查看索引,然后直接转到每一行
根据您的应用程序,如果用户只查看一个或两个订单列表,显示大约100个客户,#4更好
无论如何,考虑在循环中进行sql查询通常是一种糟糕的做法/糟糕的设计/糟糕的逻辑。这里不能使用任何原因
内部联接
或其相关(左
和右
联接
)吗?也就是说,如果你想在另一个页面上显示客户的订单,或者你不介意AJAX调用,我建议#4。如果你想立即使用所有结果,我喜欢#3。否则,请使用#4。#3的另一个扭曲是将两个查询打包到一个存储过程中,该存储过程返回两个结果集。只需一次访问数据库。