0

次のような 2 つの関連テーブルが設定されていると仮定します。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 - 名前:


while 内の while はこれが機能する方法だと思いますが、正確にどうすればよいかわかりません。また、このようなものの上に明らかにコードがありますが、そのようなものはすべて機能しており、ほとんどはデータベース接続と検索フォームを開くことに関連しています。

また、ここに含めたコードはサンプル コードであり、別の方法で間違っている可能性がありますが、ほとんどの場合、クエリと再帰を構築してデータを希望どおりに表示する方法の全体的なアイデアを探しています。表示されます。

どうぞよろしくお願いいたします。

4

1 に答える 1

0

私がやりたいのは、そのようなデータを取得して、出力したいディスプレイに適合する多次元配列に入れることです。ただし、巨大な配列は問題を引き起こす可能性があるため、データの量によって異なります。1 つのクエリを実行してから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 に答える