我可以在另一个MySQL查询的From部分中使用先前MySQL查询的结果吗?

时间:2013-03-26 16:12:53

标签: php mysql

我正在使用PHP Web服务,我在其中执行了一个简单的SELECT查询并将其存储

$result = run_query($get_query);

我现在需要根据不同的参数对数据进行进一步的查询,我知道这可以通过MySQL的形式进行:

SELECT * 
FROM (SELECT *
      FROM customers
      WHERE CompanyName > 'g')
WHERE ContactName < 'g'

我知道这会在表上执行两个Select查询。但是,我想知道的是,如果我可以简单地在第二部分的FROM部分中使用我以前保存的查询,例如,如果我认为它通过不再查询整个数据库来帮助执行是真的:< / p>

SELECT * 
FROM ($result)
WHERE ContactName < 'g'

5 个答案:

答案 0 :(得分:1)

您可以创建临时表以放置初始结果,然后使用它来选择数据和第二个查询。只有当您的第一个查询很慢时,这才会更快。

答案 1 :(得分:1)

PHP和SQL是不同的语言和非常不同的平台。它们通常甚至不在同一台计算机上运行。您的PHP变量根本不会与MySQL服务器进行交互。您使用PHP来创建恰好包含SQL代码的字符串,但这就是全部。最后,唯一重要的是您发送到服务器的SQL代码 - 您设置生成它的方式无关紧要。

此外,除非您获得解释计划,否则您无法真正说明MySQL将如何运行查询:

EXPLAIN EXTENDED
SELECT * 
FROM (SELECT *
      FROM customers
      WHERE CompanyName > 'g')
WHERE ContactName < 'g'

...但我怀疑它会为你的查询读两次表。内存比磁盘快得多。

答案 2 :(得分:1)

感谢大家的回复。事实证明我所寻找的是“查询查询”,PHP不直接支持但我在这里找到了一个提供功能的函数:http://www.tom-muck.com/blog/index.cfm?newsid=37

这是从其他SO问题中找到的:Can php query the results from a previous query?

我仍然需要进行比较以确定它是否能提高速度。

答案 3 :(得分:0)

如果我正确理解你的问题,你想知道在php变量中保存SQL查询的“from”部分是否会提高你查询SQL服务器的性能,那么答案是否定的。只是因为保留值的变量被插入到查询中。

在PHP中是否获得了性能,答案最可能是肯定的;但取决于变量值的长度(以及重复使用变量而不是构建新的完整查询的频率),性能是否值得注意。

答案 4 :(得分:0)

为什么不在这样的单个查询中获取此数据?

SELECT * 
FROM customers
WHERE CompanyName > 'g'
AND ContactName < 'g'