2017-01-27 10 views
0

このような私のpostgresqlデータベース。Laravel5でSUMアレイを取得するにはどうすればよいですか?

SELECT * FROM point_records; 

id | user_id | point |  created_at  |  updated_at 
----+---------+-------+---------------------+--------------------- 
    1 |  1 | 100 | 2017-01-27 09:39:47 | 2017-01-27 09:39:47 
    3 |  2 | 100 |      | 
    4 |  2 | 100 |      | 
    5 |  3 | 100 |      | 
    6 |  3 | 100 |      | 
    7 |  3 | 100 |      | 

SELECT user_id, SUM(point) AS points FROM point_records GROUP BY(user_id) ORDER BY points desc; 

user_id | points 
---------+-------- 
     3 | 300 
     2 | 200 
     1 | 100 

私は配列にポイントランキングを取得したいと思います。だから私はこれを行う。

$points = \App\PointRecord::selectRaw('member_id, SUM(point) AS points') -> groupBy('member_id') -> orderBy('points', 'desc') -> get() -> toArray(); 

$your_score = array_search($user -> id, $points) + 1; 

この$ points配列はこれを返します。

しかし、私はRawを使用したくありません。私は他のアイデアを探しています。

誰でも知っていますか?

答えて

0

あなたの解決策は、あなたが生のものを別のものに変更したいのはなぜかと思います。とにかく あなたは本当にあなたがより多くのコードを追加する必要があります変更したい場合は、この

$outputs = []; 
    $query = \App\PointRecord:::groupBy('member_id')->get(); 
    foreach ($query as $e) { 
     $data = $e->toArray(); 
     $data['point'] = $e->where('member_id', $data["member_id"])->sum('point'); 
     $outputs[] = $data; 
    } 
    dd($outputs); 
+0

うーん...合計(ポイント)戻り値の整数を試してみてください、しかし、GROUPBYはその上で呼び出すことはできません。しかし、私は知りませんaddSelectあなたに感謝します。 – qwe001

+0

お返事ありがとうございます。うわー、複雑に聞こえます。なぜ私は生のままに変更したいのですか?いつかPostgresからMySQLにDBを変更すると作業が止まるのを恐れています。SQLインジェクションの危険がある生の原因。だから私はできるだけrawを使いたくない – qwe001

関連する問題