0

假设我有 2 个与此类似的相关表:table_1: person_id, name; table_2:account_id、person_id、account_type、余额;

我想显示这样的结果:

(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 - balance (a)account_type - balance (a)account_type - balance (b)account_type - balance (c)account_type - balance (c)account_type - balance

(B)person_id - 姓名:

(C)person_id - 姓名:


我假设一段时间内的时间是这种方式的工作方式,但我不确定如何去做。此外,这些东西上面显然有代码,但这些东西都在工作,主要与打开数据库连接和搜索表单有关。

此外,我在此处包含的代码是示例代码,可能以另一种方式出错,但我主要只是在寻找有关如何构建查询和递归以按我想要的方式显示数据的总体思路显示。

提前感谢大家可以提供的任何帮助。

4

1 回答 1

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循环来输出数据或其他东西。可能不是最优雅或最有效的解决方案,但对于较小的数据结果,我发现将数据放入与我想要显示它的方式相匹配的结构中对我有用。

于 2012-08-14T04:12:42.527 回答