Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在可能的情况下,在后续查询中重用MySQL结果,这些查询的表单选择与($result)不同_Php_Mysql - Fatal编程技术网

Php 在可能的情况下,在后续查询中重用MySQL结果,这些查询的表单选择与($result)不同

Php 在可能的情况下,在后续查询中重用MySQL结果,这些查询的表单选择与($result)不同,php,mysql,Php,Mysql,我有一个非常复杂的查询,它基本上为我提供了一个主表,其中包含数据库中多个表中不同列的不同组合,称之为$query(使用PHP),$result=mysql\u查询的结果。我希望能够在后续较小的查询中重用$result,而无需再次执行真正复杂的查询 类似于从$result中选择不同的列,其中xxx和xxx以及xxx。如果我真的为$result in输入字符串,它会起作用,但是如果它不必超时执行整个复杂的查询,它似乎会更有效。这可能吗?您可以: 将结果保存到临时表中: 创建临时表MyTestable

我有一个非常复杂的查询,它基本上为我提供了一个主表,其中包含数据库中多个表中不同列的不同组合,称之为$query(使用PHP),$result=mysql\u查询的结果。我希望能够在后续较小的查询中重用$result,而无需再次执行真正复杂的查询

类似于从$result中选择不同的列,其中xxx和xxx以及xxx。如果我真的为$result in输入字符串,它会起作用,但是如果它不必超时执行整个复杂的查询,它似乎会更有效。这可能吗?

您可以:

  • 将结果保存到临时表中:

    创建临时表MyTestable选择。。。
    
    然后使用:

    从MyTestable中选择不同的列,其中xxx和xxx以及xxx
    
  • 使用:

    创建视图我的视图选择。。。
    
    然后使用:

    从myView中选择不同的列,其中xxx和xxx以及xxx
    
  • 不同之处在于,视图在所有会话中都是可见的,并且将一直保持到手动删除为止;然而,临时表仅在创建它们的会话中可见(因此在会话结束时不再存在)

    而且,视图正是这样的:底层数据的视图因此,当底层表更新时,这些更改将在查询视图时立即反映出来(正常事务隔离行为除外)。相比之下,临时表(就像普通表一样)保存数据的静态副本,只有在后续查询显式更新该副本时,才会对其进行更改

    因此,显然存在性能差异:视图可以使用基础表的索引,而临时表必须定义自己的索引。但是临时表使用缓存的数据,因此不必每次都重新运行基础查询(而视图需要这样做)。

    您可以:

  • 将结果保存到临时表中:

    创建临时表MyTestable选择。。。
    
    然后使用:

    从MyTestable中选择不同的列,其中xxx和xxx以及xxx
    
  • 使用:

    创建视图我的视图选择。。。
    
    然后使用:

    从myView中选择不同的列,其中xxx和xxx以及xxx
    
  • 不同之处在于,视图在所有会话中都是可见的,并且将一直保持到手动删除为止;然而,临时表仅在创建它们的会话中可见(因此在会话结束时不再存在)

    而且,视图正是这样的:底层数据的视图因此,当底层表更新时,这些更改将在查询视图时立即反映出来(正常事务隔离行为除外)。相比之下,临时表(就像普通表一样)保存数据的静态副本,只有在后续查询显式更新该副本时,才会对其进行更改


    因此,显然存在性能差异:视图可以使用基础表的索引,而临时表必须定义自己的索引。但是临时表使用缓存的数据,因此不必每次都重新运行基础查询(而视图需要)。

    只需不更改存储在其中的变量即可。如果您尝试先编写代码,然后在代码和任何错误之后出现任何问题时,我们可以提供更具建设性的反馈。如果您真的使用<代码> MySqLyQuices()/Code >,您应该考虑迁移到<代码> MySqLi<函数或<代码> PDO。
    mysql\uu
    函数很久以前就被弃用了,并且在PHP7中被删除了。只需不更改存储它的变量即可。如果您尝试先编写代码,然后在代码和任何错误之后出现任何问题时,我们可以提供更具建设性的反馈。如果您真的使用<代码> MySqLyQuices()/Code >,您应该考虑迁移到<代码> MySqLi<函数或<代码> PDO。
    mysql\uuu
    函数很久以前就被弃用了,并且在PHP7.0中被删除了。谢谢。我实际上是在使用mysqli_查询,谢谢,输入错误。这正是我需要知道的。我可以想象,如果查询很复杂,视图和临时表之间的性能会受到很大的影响,但好处是视图是动态更新和持久化的。在我的情况下,我基本上需要在会话期间使用结果进行额外的查询,这可能是一个很大的数字,然后我可以销毁它或在会话中销毁它。@sscotti:使用临时表,您可以定义索引,这将减慢其初始创建/填充,但加快后续检索;你不能在有视野的情况下这样做。因此,哪种方法对您来说最有效在很大程度上取决于您确切的模式、数据和查询,最好对这两种方法进行基准测试,看看您更喜欢哪种方法。关于使用视图的问题。这些都是您在MySQL引擎中创建的,并且它们会持续存在,比如正在创建一个表。所以你不会在PHP中以编程方式创建它?如果它有一个“监听器”来监听其他表中的更改,然后自动更新自己,那就有点不可思议了。如果其他表在会话期间不经常更新,那么这种情况下视图几乎是静态的,那么这种方法也很有效吗?是否有工具在开发过程中执行查询基准测试,以便您可以实际衡量哪种方法在各种条件下表现更好?我最近一直在使用“Atom”,它与一个PHP调试器工具和XDebug结合使用非常好,但我还没有看到用于基准测试的MySQL工具。谢谢。@sscotti:是的,视图是通过