【问题标题】:Mysqli Multi Query - Sort ResultsMysqli 多查询 - 排序结果
【发布时间】:2012-10-22 22:49:54
【问题描述】:

我想将 sql 语句的每个结果保存在不同的数组中。我试过了:

        $sql = "SELECT * FROM `link_server` WHERE `in_use` = false;";
        $sql .= "SELECT * FROM `link_queue` WHERE `active` = false;";

        if ($db->multi_query($sql))
        {
            do
            {
                // Erstes Abfrageergebnis ausgeben
                if ($result = $db->store_result())
                {
                    // Abfrageergebnis ausgeben
                    while ($server_fetch = $result->fetch_array())
                    {
                        $server[] = $server_fetch;
                    }

                    $result->close();

                }
                // Trenner fuer Zweites Abfrageergebnis
                if ($db->more_results())
                {
                    echo "<hr />test";
                    $queue[] = $server_fetch;
                }
            } while ($db->next_result());
        echo "Servers:";
        print_r($server);
        echo "Queue:";
        print_r($queue);
        }           

第一条语句的结果应该保存在数组$server中,第二条语句的结果应该保存在数组$queue中。

上面的示例将完整的返回(来自两个语句)存储在第一个数组 ($server) 中。第二个数组是空的。

我该如何解决?

感谢您的帮助!

【问题讨论】:

  • 为什么要同时进行多个查询?这似乎是不必要的复杂?
  • 因为它更快,更容易概览.. ;) 但这不是问题 ;)
  • 我怀疑这样做所节省的时间无论如何都是可观的。我强烈建议将其分成两个单独的部分,然后分别测试每个部分的准确性。
  • 让您的数据库应用程序完成繁重的工作。它针对排序和返回数据进行了优化。

标签: php mysqli multi-query


【解决方案1】:

$db-&gt;more_results() 是一种标记查询结果已到达末尾的方式,而不是获取下一组结果。您可以使用它来告诉您的循环开始加载下一个数组 - 例如通过设置一个标志。

if ($result = $mysqli->store_result()) {
    while ($server_fetch = $result->fetch_row()) {
        if (!$second) {
            $server[] = $server_fetch;
        } else {
            $queue[] = $server_fetch;
        }
    }
    $result->close();
}
/* next set of results */
if ($mysqli->more_results()) {
    $second = true;
}

或者,您可以像这样使用可变变量:

/* set up variables  */
$server = array();
$queue = array();
$active = 'server';

/* execute multi query */
if ($mysqli->multi_query($query)) {
    do {
        /* store result set */
        if ($result = $mysqli->store_result()) {
            while ($server_fetch = $result->fetch_row()) {
                ${$active}[] = $server_fetch;
            }
            $result->close();
        }
        /* next set of results */
        if ($mysqli->more_results()) {
            $active = 'queue';
        }
    } while ($mysqli->next_result());
} 

虽然我必须同意评论者的观点,但这会给原本简单的一对请求增加大量工作量和额外的代码复杂性。

【讨论】:

  • 好的,感谢所有答案.. 我认为你是对的.. 它的代码比我想象的要多,而且更复杂.. 所以我只是把它放在 2 个单独的查询中并完成。谢谢!
猜你喜欢
  • 2016-01-15
  • 2011-08-21
  • 2017-07-24
  • 2018-06-24
  • 1970-01-01
  • 1970-01-01
  • 2013-08-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多