lottery_winners
次の便利な列で呼ばれるテーブルがあります。
+ ---- + ------ + ------ + -------- + --------- + | id | plid | zbid | 金額| 数字| + ---- + ------ + ------ + -------- + --------- +
id
テーブルの一意のプライマリIDです。plid
テーブルを参照しpast_lotteries
ます(つまり、過去に特定の宝くじからすべての宝くじの当選者をこの方法で取得できます。zbid
はメンバー/ユーザー(当選者)のIDです。amount
は、宝くじで当選した金額の合計であり、最終的にnumbers
はVARCHAR
宝くじ番号が記載された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
これらの結果はページ付けされるため、クエリの最後に追加する必要があることにも注意してください。