2

lottery_winners次の便利な列で呼ばれるテーブルがあります。

+ ---- + ------ + ------ + -------- + --------- +
| id | plid | zbid | 金額| 数字|
+ ---- + ------ + ------ + -------- + --------- +

idテーブルの一意のプライマリIDです。plidテーブルを参照しpast_lotteriesます(つまり、過去に特定の宝くじからすべての宝くじの当選者をこの方法で取得できます。zbidはメンバー/ユーザー(当選者)のIDです。amountは、宝くじで当選した金額の合計であり、最終的にnumbersVARCHAR宝くじ番号が記載されたCSVフィールド。

表に含まれる可能性のある行の例を次に示します。

+ ---- + ------ + ------ + -------- + --------- +
| id | plid | zbid | 金額| 数字|
+ ---- + ------ + ------ + -------- + --------- +
| 1 | 1 | 2 | 1 | 1,2,3 |
+ ---- + ------ + ------ + -------- + --------- +
| 2 | 1 | 4 | 5 | 4,5,6 |
+ ---- + ------ + ------ + -------- + --------- +
| 3 | 1 | 3 | 7 | 3,4,5 |
+ ---- + ------ + ------ + -------- + --------- +
| 4 | 1 | 2 | 3 | 7,8,9 |
+ ---- + ------ + ------ + -------- + --------- +
| 5 | 2 | 2 | 8 | 8,9,10 |
+ ---- + ------ + ------ + -------- + --------- +

SELECTここで、すべての行を実際に特定の順序で戻すステートメントを実行したいと思います。行は、そのようにグループ化する必要があります(この場合、句zbidを追加しました)。WHERE plid=1

+ ---- + ------ + ------ + -------- + --------- +
| id | plid | zbid | 金額| 数字|
+ ---- + ------ + ------ + -------- + --------- +
| 1 | 1 | 2 | 1 | 1,2,3 |
+ ---- + ------ + ------ + -------- + --------- +
| 4 | 1 | 2 | 3 | 7,8,9 |
+ ---- + ------ + ------ + -------- + --------- +
| 2 | 1 | 4 | 5 | 4,5,6 |
+ ---- + ------ + ------ + -------- + --------- +
| 3 | 1 | 3 | 7 | 3,4,5 |
+ ---- + ------ + ------ + -------- + --------- +

次の基準は、それらを。でグループ化するだけでなくzbid、このグループ内で。で並べ替える必要があるということamount DESCです。これは、現在のようになります。

+ ---- + ------ + ------ + -------- + --------- +
| id | plid | zbid | 金額| 数字|
+ ---- + ------ + ------ + -------- + --------- +
| 4 | 1 | 2 | 3 | 7,8,9 |
+ ---- + ------ + ------ + -------- + --------- +
| 1 | 1 | 2 | 1 | 1,2,3 |
+ ---- + ------ + ------ + -------- + --------- +
| 2 | 1 | 4 | 5 | 4,5,6 |
+ ---- + ------ + ------ + -------- + --------- +
| 3 | 1 | 3 | 7 | 3,4,5 |
+ ---- + ------ + ------ + -------- + --------- +

上の2行が入れ替わっています。

もう1つの基準。ご覧のとおり、グループ化されていますが、zbid特定の順序はありません。でグループ化したいのですが、順序はグループごとzbidに基づいている必要があります。sum(amount)

次の表は、それぞれの合計をzbid特定の順序で示していません(次のことを考慮に入れてplid=1ください:

+ ------ + ------------- +
| zbid | 合計(金額)|
+ ------ + ------------- +
| 2 | 4 |
+ ------ + ------------- +
| 3 | 7 |
+ ------ + ------------- +
| 4 | 5 |
+ ------ + ------------- +

したがって、この情報を使用すると、SELECTステートメントを使用した最終結果は次のようになります(sum(amount)列が追加されます)。

+ ---- + ------ + ------ + -------- + --------- + ----------- --+
| id | plid | zbid | 金額| 数字| 合計(金額)|
+ ---- + ------ + ------ + -------- + --------- + ----------- --+
| 3 | 1 | 3 | 7 | 3,4,5 | 7 |
+ ---- + ------ + ------ + -------- + --------- + ----------- --+
| 2 | 1 | 4 | 5 | 4,5,6 | 5 |
+ ---- + ------ + ------ + -------- + --------- + ----------- --+
| 4 | 1 | 2 | 3 | 7,8,9 | 4 |
+ ---- + ------ + ------ + -------- + --------- + ----------- --+
| 1 | 1 | 2 | 1 | 1,2,3 | 4 |
+ ---- + ------ + ------ + -------- + --------- + ----------- --+

それでおしまい!今、私は自分でいくつかのことを試しましたが、完全な最終結果を得る方法が正確にはわかりません。私が試してみました:

SELECT id,plid,zbid,amount,numbers,sum(amount) FROM lottery_winners GROUP BY zbid ORDER BY sum(amount) DESC

これで最終的な基準を満たしているように見えましたが、テーブルの個別の結果は得られませんでした。

LIMIT $start,$perpageこれらの結果はページ付けされるため、クエリの最後に追加する必要があることにも注意してください。

4

1 に答える 1