2017-09-26 4 views
0

は、私は2つのテーブルがあるとします。私は、内部結合を行った後1対多の結合クエリの結果を各 "1"のsignleオブジェクトに還元する方法はありますか?

Applicants: 
- id 
- full_name 
- address 

Educations: 
- id 
- applicant_id 
- institute 
- address 

を、私は、テンプレート上のデータをループにしたいです。しかし、まず、申請者のすべての教育記録を配列に変換して申請者の記録に添付したいと思います。

applicant_a: 
- id 
- full_name 
- address 
- educations: [ OBJECTS HERE ] 

どうすればいいですか?私はSQL経由でデータベース側でそれを行うことはできますか?それともPHP側でやる必要がありますか?

+0

興味深い質問です。私はあなたが2つの質問をしなければならないと信じています。 –

+0

これはPHPで簡単です。申込者が変更するまで2つの配列を持ってから、教育機関の配列を申請者に保存してください。 (もちろん、応募者ごとにSQLでソートする必要があります) – Jeff

答えて

1

これは、私があなたの場合にどのように行うのかについての簡単な草案です。
私はこれが最高だと言っているわけではなく、の唯一の方法はです。
この特定のテストは行われませんが、以前はそのロジックを使用していました。
これはここの論理に関するものですが、これはあなたが望むものを与えるはずです!

$applicants = array(); 
$old_applicant_id=null; 

while ($row=$db->fetch()) { 

    // new applicant 
    if($row['applicant_id']!=$old_applicant_id) { 
     // save the education to the old one - if there is one 
     if(isset($applicant)) { 
      $applicant['education'] = $educations; 
      $applicants[] = $applicant; 
     } 
     // then (and in first round) 
     $applicant = array(); 
     $applicant['fullName'] = $row['fullName']; 
     // repeat for other values of applicant 

     $educations = array(); // initialize educations 
     $education = array(); 
     $education['id'] = $row['edu_id']; 
     // repeat for institute, etc 
     $educations[] = $education; 
    } else { 
     // already existing applicant, so only add education 
     $education = array(); 
     $education['id'] = $row['edu_id']; 
     // repeat for institute, etc 
     $educations[] = $education; 
    } 
    // set old applicant 
    $old_applicant_id = $row['applicant_id']; 
} 
// finally you have to save the last one to the array 
$applicant['education'] = $educations; 
$applicants[] = $applicant; 

別の方法として、2つの別々のクエリを2つのループでマージする方法があります。

This question of mineが関連していました。私は2つのバージョンのスペードについて質問していました。興味深いかもしれない。

0

MySQLは配列を返さないため、この種のことは通常クライアントコード(この場合はPHP)で最もよく行われます。

しかし、教育をある種の文字列に連結する場合は、GROUP_CONCAT集合関数を調べるとよいでしょう。

関連する問題