Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.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 在循环中运行多个查询,并构建多维数组_Php_Multidimensional Array_Mysqli_Union - Fatal编程技术网

Php 在循环中运行多个查询,并构建多维数组

Php 在循环中运行多个查询,并构建多维数组,php,multidimensional-array,mysqli,union,Php,Multidimensional Array,Mysqli,Union,我正在根据用户跟踪的用户构建数据流。虽然我有一个工作原型,但代码看起来不必要的丑陋,因为多个循环中嵌套了进一步的查询。我想知道我是否可以得到任何关于简化此操作的建议,以及在sql查询本身中可能处理更多操作的建议?下面是一些代码:我已经对其进行了一些删减,并删除了一些检索到的行 $init = $conn->prepare("SELECT followerid FROM following WHERE userid=?"); $init->bind_param("s", $userid

我正在根据用户跟踪的用户构建数据流。虽然我有一个工作原型,但代码看起来不必要的丑陋,因为多个循环中嵌套了进一步的查询。我想知道我是否可以得到任何关于简化此操作的建议,以及在sql查询本身中可能处理更多操作的建议?下面是一些代码:我已经对其进行了一些删减,并删除了一些检索到的行

$init = $conn->prepare("SELECT followerid FROM following WHERE userid=?");
$init->bind_param("s", $userid);
$init->execute();
$init->bind_result($idq);
$init->store_result();
$num = $init->num_rows();
  while($init->fetch()) {

    // get all to be done by each user
    $stmt = $conn->prepare("SELECT activityId FROM done WHERE userId=? ORDER BY number DESC");
    $stmt->bind_param("s", $idq);
    $stmt->execute();
    $stmt->bind_result($aiddo);
    $stmt->store_result();
    $num_do = $stmt->num_rows;
      while($stmt->fetch()) {
        $activityId_do[] = $aiddo;
      }

    // get location information
    for($i=0; $i<=$num_do; $i++) {
      $act_done = $conn->prepare("SELECT fullAddress FROM `activity` WHERE (id=?)");
      $act_done->bind_param("s",$activityId_do[$i]);
      $act_done->execute();
      $act_done->bind_result($fullAddress);
        while($act_done->fetch()) {
          $do_array[] = array(
            "fullAddress"=>$fullAddress,
            "type"=>"do"
          );

        }
    }

    //get all done by each user
    $stmt = $conn->prepare("SELECT activityId FROM done WHERE userId=? ORDER BY number DESC");
    $stmt->bind_param("s", $idq);
    $stmt->execute();
    $stmt->bind_result($aid);
    $stmt->store_result();
    $num_done = $stmt->num_rows;
      while($stmt->fetch()) {
        $activityId[] = $aid;
    }

    for($i=0; $i<=$num_done; $i++) {
      $act_done = $conn->prepare("SELECT fullAddress FROM `activity` WHERE (id=?)");
      $act_done->bind_param("s",$activityId[$i]);
      $act_done->execute();
      $act_done->bind_result($fullAddress);
        while($act_done->fetch()) {
          $done_array[] = array(
            "fullAddress"=>$fullAddress,
            "type"=>"done"
          );

        }
    }

    //get all stories by each user
    $stmt = $conn->prepare("SELECT activityId FROM story WHERE userId=? ORDER BY number DESC");
    $stmt->bind_param("s", $idq);
    $stmt->execute();
    $stmt->bind_result($aidst);
    $stmt->store_result();
    $num_story = $stmt->num_rows;
      while($stmt->fetch()) {
        $activityId_story[] = $aidst;
      }

    for($i=0; $i<=$num_story; $i++) {
      $act_done = $conn->prepare("SELECT fullAddress FROM `activity` WHERE (id=?)");
      $act_done->bind_param("s",$activityId_story[$i]);
      $act_done->execute();
      $act_done->bind_result($fullAddress);
        while($act_done->fetch()) {
          $story_array[] = array(
            "fullAddress"=>$fullAddress,
            "type"=>"story"
          );

        }
    }

}

有没有更好的方法来实现这一点?在这种情况下,这是构建多维数组的最佳方法吗

我会在数据库中为被跟踪的用户或其他人创建一个表,您可以将用户链接到他们跟踪的用户id,然后查询该表中的id列表,然后运行下一次查询以获取您正在提取的信息,或者,如果数据较小,则将该数据也存储到表中

=======================================
| id | user_id | following_id | type  |
=======================================
|  1 |     101 |           12 | story |
|  2 |     108 |           15 | story |
|  3 |     108 |           16 |    do |
|  4 |     108 |           19 |  done |
=======================================

甚至可以添加地址,如果这就是你想要的

,但一个很好的建议是,这不起作用,因为每个用户都可以拥有每个状态的项目。他们可以同时拥有他们正在做的、已经做过的项目,并为所有人添加一个故事。这就是为什么类型与返回的信息类型相关联。它的唯一用途是告诉javascript如何显示输出。您可以有多个具有相同用户标识的行,以及具有不同类型项的后续标识的行。。。这就是数据库的乐趣,我知道。但我不知道这将如何解决这个问题。事情就是这样,我只是想知道有没有更好的办法。将类型移动到第一个查询中似乎会使所有内容更加复杂。另外,我需要在下表中为活动表中的每个项目添加一个新行。关于在第一个循环中的查询上使用union,您所了解的是什么。例如:将完成的查询与位置信息查询联接起来?
=======================================
| id | user_id | following_id | type  |
=======================================
|  1 |     101 |           12 | story |
|  2 |     108 |           15 | story |
|  3 |     108 |           16 |    do |
|  4 |     108 |           19 |  done |
=======================================