2016-04-06 54 views
0

我有一些表的分數是這樣的...MySQL查詢得到一些表/陣列

id A B score 
1 10 4 100 
2 10 2 320 
3 10 1 100 
4 20 4 20 
5 20 3 100 
6 20 2 120 
7 20 1 110 
8 30 4 30 
9 30 3 200 

,我想一些查詢或PHP的方法,使輸出像

column A => 10 20  30 
     4 = 100 20  30 
     3 = null 100 200 
     2 = 320 120 null 
     1 = 100 110 null 
     ^
     || 
     (coumn b) 

  4 ,100,20,30 
     3 ,null,100,200 
     2 ,320,120,null 
     1 ,100,110,null 

所以我想獲得列分數,但基於coumn B,如果列A沒有一列B的行分數,則會給出null。

我已經試過完全加入,交叉加入等,但我沒有得到那樣的。

SELECT * FROM TABLE CROSS JOIN 
     (SELECT * FROM TABLE CROSS GROUP BY B) 
    ORDER BY B DESC 

感謝

回答

1

這裏是另一種方式,你可以做到這一點做一個嵌套循環(使用mysqli_*):

echo '<table>'; 

$stmt = $connection->prepare("SELECT B FROM TABLE ORDER BY B DESC"); 
$stmt->execute(); 
$stmt->store_result(); 
$stmt->bind_result($b); 
while($stmt->fetch()){ 

    echo '<tr> 
       <td>'.$b.'</td>'; 

    $stmt2 = $connection->prepare("SELECT A FROM TABLE GROUP BY A ORDER BY A"); 
    $stmt2->execute(); 
    $stmt2->store_result(); 
    $stmt2->bind_result($a); 
    while($stmt2->fetch)){ 

     $stmt3 = $connection->prepare("SELECT score FROM TABLE WHERE A = ? AND B = ?"); 
     $stmt3->bind_param("ii", $a, $b); 
     $stmt3->execute(); 
     $stmt3->store_result(); 
     if($stmt3->num_rows > 0){ 
      $stmt3->bind_result($score); 
      $stmt3->fetch(); 
      echo '<td>'.$score.'</td>'; 
     } else { 
      echo '<td>NULL</td>'; 
     } 
     $stmt3->close(); 

    } /* END OF WHILE LOOP OF SECOND STATEMENT */ 
    $stmt2->close(); 

    echo '</tr>'; /* END OF ROW */ 

} /* END OF WHILE LOOP */ 
$stmt->close(); 

echo '</table>'; 

但我敢肯定有人會回答你的問題在一個單一的查詢。

+0

感謝:D,在等待某人幫助我處理某個單個查詢時,我會嘗試你的方式。 –

+0

嘿,我試過了,這對我來說很好,如果在服務器端代碼上使用嵌套循環,而不是在sql上。謝謝 –