2017-03-22 9 views
0

私は特定のマッチIDからすべてのホールスコアを取得し、それらをユーザーIDでグループ化するゴルフリーダーボードを作っています。この部分はうまく動作します。GROUP BYで配列を作成する

私はこのようにそれを行う:今

$playersArray = array(); 

$sql = "SELECT *, SUM(point) AS points, COUNT(*) AS holes, COUNT(*)*2-SUM(point) AS topar FROM fb_score WHERE matchid=$matchid GROUP BY userid"; 
$result = $conn->query($sql); 

if ($result->num_rows > 0) { 

    while($row = $result->fetch_assoc()){ 
     $playersArray[] = $row; 
    } 

} 

、私の質問があり、私は、各ユーザーのすべての「点」の配列を作成し、$行の中にそれを得ることができますwaythatはありますか?

SUM(ポイント)は3ポイント(3、5、4)と言います。結果でこれを得ることはできますか?今のように、私は各ユーザーの最新の$行だけを取得しますが、追加された "ポイント"、 "ホール"、 "topar"が追加されています。

希望は、この質問は理にかなって: -/

すべてのヘルプは高く評価され、感謝

+0

$ row ['point']はあなたが望むものではありませんか? –

+0

@ user2078421これは、各行のすべての一致についての合計ではなく、グループからの「最後の立った」一致です。 –

+0

@ user2078421最終結果に$ row [point]と配列を作りたいと思います。理にかなっている?多分新しい$行を作成する[pointsarray] =配列(ユーザ別にallpoints) – Mansa

答えて

1

:-)事前に少しハックかもしれないが、それは動作します。単純に値をGROUP_CONCATすれば、$ row varに値が格納され、配列内でそれらを爆発させることができます。

select *, GROUP_CONCAT(CONVERT(point,CHAR)) as all_points from fb_score GROUP BY userid 
+1

パーフェクト...魅力的な作品:-) – Mansa