2012-03-27 21 views
3

を配列に結果として、私は次のクエリを持っている:SQLクエリの結果が参加し、PHP

SELECT * FROM teams 
LEFT JOIN participants 
ON teams.teamNo = participants.teamNo 
ORDER BY teams.teamNo ASC 

クエリは明らかにチームテーブル内のすべてのチームを取得し、どこその参加者のテーブルに一致する参加者があります戻ってくる。すべてのチームが参加者を割り当てているわけではありませんが、すべてのチームを表示する必要があります。

私は(予告チーム2のように、同じページ上のデータをdiplayしたいが、何の現在の参加者がありませんが、まだ表示されます。

Team 1:  
- Participant 1 
- Participant 2 
- Participant 3 

Team 2: 

Team 3:  
- Participant 1 
- Participant 2 

I持って、現在のSQLクエリから戻ってくる次の配列:私は少し、以下のような配列に変換する必要があると考えてい

Array 
(
[0] => Array 
    (
     [TeamNo] => 1 
     [ParticipantFirstNames] => Katie 
     [ParticipantSurname] => Bloggs 
    ) 

[1] => Array 
    (
     [TeamNo] => 1 
     [ParticipantFirstNames] => Jenny 
     [ParticipantSurname] => Ruffles 
    ) 

[2] => Array 
    (
     [TeamNo] => 1 
     [ParticipantFirstNames] => Hannah 
     [ParticipantSurname] => Cox 
    ) 

[3] => Array 
    (
     [TeamNo] => 2 
     [ParticipantFirstNames] => 
     [ParticipantSurname] => 
    ) 

[4] => Array 
    (
     [TeamNo] => 3 
     [ParticipantFirstNames] => Alex 
     [ParticipantSurname] => Glover 
    ) 

[5] => Array 
    (
     [TeamNo] => 3 
     [ParticipantFirstNames] => Karl 
     [ParticipantSurname] => Lawrence 
    ) 

が、PHPでこれを行う方法がわからないイム:

array(
array( 'TeamNo' => '1', 
     'TeamParticipants' => array(
          array( 'ParticipantFirstName' => 'Harry', 
            'ParticipantSurname' => 'Bloggs'), 
          array( 'ParticipantFirstName' => 'James', 
            'ParticipantSurname' => 'Car')) 
          ) 

array( 'TeamNo' => '2', 
     'TeamParticipants' => array()) 


array( 'TeamNo' => '3', 
     'TeamParticipants' => array(
          array( 'ParticipantFirstName' => 'Harry', 
            'ParticipantSurname' => 'Bloggs'), 
          array( 'ParticipantFirstName' => 'James', 
            'ParticipantSurname' => 'Car') 
           ) 

          ) 
) 

私はちょうど誰かが助けることができる配列のまわりで私の頭を得ることができないか、最初の場所で別のクエリが必要ですか?私はPHPを使用しています。

+0

SQLはうまく見えます。私はそれを知らない。 – xQbert

答えて

2

これはあなたが望むものに、あなたの現在の配列を変換します:

$newArray = array(); 
foreach ($resultArray as $record) { 
    $currentTeam = $record('TeamNo'); 
    if (!array_key_exists($currentTeam, $newArray)) { 
     $newArray[$currentTeam] = array('TeamNo' => $currentTeam, 'TeamParticipants => array()); 
    } 
    if (!empty($record['ParticipantFirstName']) { 
     $newArray[$currentTeam]['TeamParticipants'][] = array('ParticipantFirstName' => $record['ParticipantFirstName'], 'ParticipantLastName' => $record['ParticipantLastName']); 
    } 
} 

これは、主にテストされていないですが、それはあなたが欲しいものを基本的に提供する必要があります。唯一の違いは、外部で連想配列を使用して、すでに作成されているチーム番号を簡単に検索できることです。

このようにして配列を変換する理由を判断する必要はありません。私はあなたがなぜこのフォーマットで配列が必要なのかをよく知っていると仮定しています。これはあなたがそれを得るのを助けるはずです。

+0

これは完璧です、ありがとう –

+0

喜んでそれが助け!あなたはそれをアップヴォートし、それを答えとしてマークできますか? – davidethell

0

mysql_fetch_assoc()またはmysql_fetch_array()を試しましたか?どのような機能を使用すると、このような何かが何をすべき出力

$query = "SELECT * FROM teams 
LEFT JOIN participants 
ON teams.teamNo = participants.teamNo 
ORDER BY teams.teamNo ASC" 

$result = mysql_query($query); 

while($row = mysql_fetch_array($result)){ 
    echo $row[0]; 
    echo $row[1]; 
    //and so on, this will display the data starting by the index 0 which is the first field 
} 
0

をフェッチに使用されています

$q=mysql_query("your query"); 
while($r=mysql_fetch_assoc($q)) { 
    $a["Team ".$r["teamNo"]][]=array("fname"=>$r["firstName"], "sname"=>$r["surname"]); 
} 

$a["Team ".$r["teamNo"]]が作成されます - または既存の参照 - 配列$aの連想インデックス"Team N"で値を。

$a["Team ".$r["teamNo"]][]によれば、上記の値は自動インクリメントのint型インデックス配列です(したがって、各呼び出しで新しいintキーが作成されます)。

この自動インクリメントインデックスに一致する値は、現在の参加者のファーストネームを参照する"fname"と、現在の参加者のファーストネームを参照する"sname"という2つのキーと値のペアを持つ配列に設定されます。

foreach($a as $team=>$participants) { 
    echo "<h1>$team</h1>"; 
    foreach($participants as $identity) { //no need for keys here, as they're semantically irrelevant 
    echo $identity["fname"]." ".strtoupper($identity["sname"])."<br>"; 
    } 
} 

これは

が表示されます。たとえば、表示用のループ付きそう

$a["Team 1"][0]["fname"] //Billy 
$a["Team 1"][1]["fname"] //John 
$a["Team 1"][0]["sname"] //The Kid 
$a["Team 2"][1]["sname"] //Ness 

:PHPを使用して

$a : array { 
    "Team 1" : array { 
    0 : array { 
     "fname" > "Billy" 
     "sname" > "The Kid" 
    } 
    } 
    "Team 1" : array { 
    1 : array { 
     "fname" > "John" 
     "sname" > "Dillinger" 
    } 
    } 
    "Team 2" : array { 
    0 : array { 
     "fname" > "Melvin" 
     "sname" > "Purvis" 
    } 
    } 

    "Team 2" : array { 
    1 : array { 
     "fname" > "Eliot" 
     "sname" > "Ness" 
    } 
    } 
} 

が、あなたはそれが好きアクセス: これは構造を与えます

<h1>Team 1</h1> 
Billy THE KID<br> 
John DILLINGER<br> 
<h1>Team 2</h1> 
Melvin PURVIS<br> 
Eliot NESS<br> 

配列をよりよく理解するためにはこれが十分明確であることを願っています。

関連する問題