php / mysql以递归方式显示相关表中的相关记录

时间:2012-08-12 07:04:51

标签: php mysql html recursion inner-join

假设我有2个相关的表设置类似于: table_1:person_id,name; table_2:account_id,person_id,account_type,balance;

我想显示如下结果:

(A)person_id - 名称: (a)account_type - 余额, (a)account_type - 余额, (a)account_type - 余额

(B)person_id - 名称: (b)account_type - 余额

(C)person_id - 名称: (c)account_type - 余额, (c)account_type - 余额


以下是我到目前为止(我不确定是否应该在2个查询中执行此操作或只是1个已加入的查询)$ where1和$ search是当前已在页面上工作的用户输入搜索字段。 $ y是我对传递变量的愚蠢尝试,但我不认为这是我正在尝试做的正确解决方案:

$q = "SELECT person_id, 
FROM table_1 WHERE $where1 LIKE '$search%'"; 
$r = @mysqli_query ($dbc, $q);

$q2 = "SELECT person_id, balance, account_type 
FROM accounts WHERE person_id LIKE '$y%'"; 
$r2 = @mysqli_query ($dbc, $q2);

while($row = mysqli_fetch_array($r)) {
    echo $row['person_id']. " - " .$row['name']. ":";
    $y = $row['person_id'];
    echo "</br>";
        while($row = mysqli_fetch_array($r2)) {
        echo $row['account_type']. " - " .$row['balance'] ."</br>";
        }       
    echo "</br>";
    }

目前显示:

(A)person_id - 名称: (a)account_type - 余额 (a)account_type - 余额 (a)account_type - 余额 (b)account_type - 余额 (c)account_type - 余额 (c)account_type - 余额

(B)person_id - 名称:

(C)person_id - 名称:


我认为,在这段时间内,这是可行的方式,但我不确定如何去做。此外,显然有代码高于这些东西,但这些东西都工作,并且主要与打开数据库连接和搜索表单有关。

此外,我在这里包含的代码是示例代码,可能是另一种方式错误但我主要只是寻找如何构建查询和递归以显示数据的总体思路我希望它显示出来。

提前感谢您提供的所有帮助。

1 个答案:

答案 0 :(得分:0)

我喜欢做的是将这样的数据放入多维数组,以适合我想要输出的显示。这取决于您拥有多少数据,因为巨大的数组可能会导致问题。我会做一个查询,order by person_id,然后你想要的任何其他数据。然后循环查询并使用第一个数组键来跟踪person_id

$output_ary = array();
while($row = mysqli_fetch_array($r)) {
   if ( !array_key_exists($output_ary, $r['person_id'] ) {
      $output_ary[$r['person_id']] = array();
   }
   $output_ary[$r['person_id']][] = $r; // or a new array with the data elements you want
}

然后您可以使用嵌套的foreach循环来输出数据或其他内容。可能不是最优雅或最有效的解决方案,但对于较小的数据结果,我发现将数据放入与我想要显示它的方式相匹配的结构对我来说很有用。