2

テーブルAとテーブルBの2つのテーブルがあります。テーブルAの各レコードについて、テーブルBには多くのレコードがあります。したがって、テーブルAとテーブルBの間には1対多の関係が存在します。テーブルAから返される各行について、対応するすべての行がテーブルBから返されるようにクエリを実行したいと思います。 -を使用するにはINNER Join-しかし、PHPなどを介して返されたすべての行にアクセスするにはどうすればよいですか?

$sql = "Select A.ID, B.Name * From A INNER JOIN B ON A.ID = B.ID";
A.ID | B.fName | B.lName
1 nameone lnameone
1 nametwo lnametwo
2 namethree lnamethree
4 namefour lnamefour

B.Name上記の結果が得られたので、PHPを使用して、一度に1つの値のみのすべての値をループしますA.ID。したがって、私が望む結果は次のようになります。

1.1。
nameOne lNameOne
nameTwo lnametwo

2. namethree lNamethree

4. nameFour lNameFour

基本的に、テーブルAのIDでクエリ結果をグループ化しようとしています。

助けてくれてありがとう!

ありがとうございました、

エヴァン

4

2 に答える 2

0

SQLクエリに単純なものを追加するORDER BY A.IDと、アイテムを「グループ化」するのにかなりの距離がかかるでしょう。「グループ」で何をしたいのかを正確に知らずに、より詳細な答えを出すことは困難です。

于 2012-05-22T14:31:02.917 に答える
0

Googleの「phpgetfromdatabase」を使用して、通常の配列前処理を使用することもできますが、アドバイスが理想的ではない可能性があるのではないかと心配しています。これが私がすることです:

$pdo = new PDO('mysql:host=host;dbname=dbname', 'user', 'pass');
$result = $pdo->query(<<<SQL
   SELECT
      ID,
      Name
   FROM
      A
      -- Alternative to `JOIN B USING(ID)` or `JOIN B ON (A.ID = B.ID)
      NATURAL JOIN B
SQL
);
$a = array();
while ($row = $result->fetch()) {
   if (!isset($a[$row['ID']]) {
      $a[$row['ID']] = array();
   }
   $a[$row['ID']][] = $row['Name'];
}

後でPHPで名前と名前をdにして、手動の配列作成をスキップし、反復を減らすこともできます(ただし、その場合はSQLの方が多くなりますGROUP BY)。IDGROUP_CONCATexplode

于 2012-05-22T14:28:06.330 に答える