Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up
for free
ランキング実装に失敗するとこうなるという例 / Broken ranking
HASEGAWA Tomoki
April 24, 2019
Technology
0
410
ランキング実装に失敗するとこうなるという例 / Broken ranking
PHP勉強会@東京 #134 の資料です。
HASEGAWA Tomoki
April 24, 2019
Tweet
Share
More Decks by HASEGAWA Tomoki
See All by HASEGAWA Tomoki
tomzoh
1
1.5k
tomzoh
0
100
tomzoh
4
160
tomzoh
0
740
tomzoh
1
250
tomzoh
2
460
tomzoh
0
570
tomzoh
0
1.3k
tomzoh
1
350
Other Decks in Technology
See All in Technology
htomine
0
160
tj8000rpm
0
170
tsuyo
0
480
5ebec
0
160
lmi
5
3.5k
gracia
0
940
ymatsuwitter
0
200
maekawa123
0
540
line_developers
PRO
2
430
comucal
PRO
0
300
supership
0
180
brtriver
1
460
Featured
See All Featured
geeforr
333
29k
sferik
613
55k
vanstee
117
4.9k
kneath
220
15k
tanoku
86
8.6k
dougneiner
56
5.4k
schacon
147
6.7k
moore
125
21k
ddemaree
273
31k
lynnandtonic
272
16k
maggiecrowley
10
540
hatefulcrawdad
257
17k
Transcript
୩ஐر ϥϯΩϯά࣮ʹ ࣦഊ͢Δͱ͜͏ͳΔͱ͍͏ྫ
୩ஐر !UPN[PI
ϥΠϑϫʔΫ ςοΫΧϯϑΝϨϯεӡӦࢀՃ 8FCJ04ΞϓϦ։ൃ Ϗʔϧ $16 ϨτϩήʔϜػ ిࢠ࡞
αοΧʔ؍ઓ ϨϯλϧΧʔτϨʔε ʜ σδλϧαʔΧεגࣜձࣾ ෭ஂ$50 !UPN[PI
None
None
8FC%FWFMPQNFOUXJUI 8&"3&)*3*/( IUUQXXXEHDJSDVTDPN 0NPUFTBOEP 5PLZP
ࢿྉެ։ࡁͰ͢ !UPN[PI
ࠓͷςʔϚ
None
ϥϯΩϯά࣮ʹ ࣦഊ͢Δͱ͜͏ͳΔͱ͍͏ྫ
None
None
None
None
None
None
SELECT tmp.attendee_id, tmp.score, tmp.rank FROM ( select attendee_id, score, @c:=@c+1
rank from challenge_players where conference_id = :conference_id and challenge_id = :challenge_id order by score desc, last_scored asc ) tmp ', [ 'conference_id' => $challenge->conference_id, 'challenge_id' => $challenge->id, ]) ->fetchAll('assoc');
SELECT tmp.attendee_id, tmp.score, tmp.rank FROM ( select attendee_id, score, @c:=@c+1
rank from challenge_players where conference_id = :conference_id and challenge_id = :challenge_id order by score desc, last_scored asc ) tmp ', [ 'conference_id' => $challenge->conference_id, 'challenge_id' => $challenge->id, ]) ->fetchAll('assoc');
SELECT tmp.attendee_id, tmp.score, tmp.rank FROM ( select attendee_id, score, @c:=@c+1
rank from challenge_players where conference_id = :conference_id and challenge_id = :challenge_id order by score desc, last_scored asc ) tmp ', [ 'conference_id' => $challenge->conference_id, 'challenge_id' => $challenge->id, ]) ->fetchAll('assoc'); είΞͷ߱ॱ
SELECT tmp.attendee_id, tmp.score, tmp.rank FROM ( select attendee_id, score, @c:=@c+1
rank from challenge_players where conference_id = :conference_id and challenge_id = :challenge_id order by score desc, last_scored asc ) tmp ', [ 'conference_id' => $challenge->conference_id, 'challenge_id' => $challenge->id, ]) ->fetchAll('assoc'); είΞͷ߱ॱ
SELECT tmp.attendee_id, tmp.score, tmp.rank FROM ( select attendee_id, score, @c:=@c+1
rank from challenge_players where conference_id = :conference_id and challenge_id = :challenge_id order by score desc, last_scored asc ) tmp ', [ 'conference_id' => $challenge->conference_id, 'challenge_id' => $challenge->id, ]) ->fetchAll('assoc'); είΞͷ߱ॱ ࠷ऴείΞ֫ಘ࣌ࠁͷঢॱ
SELECT tmp.attendee_id, tmp.score, tmp.rank FROM ( select attendee_id, score, @c:=@c+1
rank from challenge_players where conference_id = :conference_id and challenge_id = :challenge_id order by score desc, last_scored asc ) tmp ', [ 'conference_id' => $challenge->conference_id, 'challenge_id' => $challenge->id, ]) ->fetchAll('assoc'); είΞͷ߱ॱ ࠷ऴείΞ֫ಘ࣌ࠁͷঢॱ ಉͳΒઌʹͦͷʹୡͨ͠ํ͕উͪ
None
͜ΕͰ ʹͳͬͨ
͜ΕͰ ʹͳͬͨ ͜ΕͰ ʹ͍͍ͨ
$challengeInputsQuery = TableRegistry::get('ChallengeInputs')->find() ->where([ 'conference_id' => $challengePlayer->conference_id, 'challenge_id' => $challengePlayer->challenge_id,
'attendee_id' => $challengePlayer->attendee_id, ]); $scoreTotal = $challengeInputsQuery ->select([ 'score_total' => $challengeInputsQuery->func()->sum('score') ]) ->first(); if (! is_null($scoreTotal->score_total)){ $challengePlayer->score = intval($scoreTotal->score_total); $challengePlayer->last_scored = new Time(); } else { $challengePlayer->score = 0; }
$challengeInputsQuery = TableRegistry::get('ChallengeInputs')->find() ->where([ 'conference_id' => $challengePlayer->conference_id, 'challenge_id' => $challengePlayer->challenge_id,
'attendee_id' => $challengePlayer->attendee_id, ]); $scoreTotal = $challengeInputsQuery ->select([ 'score_total' => $challengeInputsQuery->func()->sum('score') ]) ->first(); if (! is_null($scoreTotal->score_total)){ $challengePlayer->score = intval($scoreTotal->score_total); $challengePlayer->last_scored = new Time(); } else { $challengePlayer->score = 0; } ਖ਼ղτʔΫϯ͡Όͳͯ͘ MBTU@TDPSFEΛߋ৽ͯ͠Δʜɻ
None
ແ೦
·ͱΊ
wϥϯΩϯάείΞτʔλϧΛϨίʔυʹ ॻ͍͓͚ͯൺֱత؆୯ʹ࡞ΕΔΑɻ ·ͱΊ
wϥϯΩϯάείΞτʔλϧΛϨίʔυʹ ॻ͍͓͚ͯൺֱత؆୯ʹ࡞ΕΔΑɻ wಉ͕ൃੜͨ࣌͠ͷϩδοΫΛॻ͘ͳΒςετ ͠Α͏Ͷɻ ·ͱΊ
wϥϯΩϯάείΞτʔλϧΛϨίʔυʹ ॻ͍͓͚ͯൺֱత؆୯ʹ࡞ΕΔΑɻ wಉ͕ൃੜͨ࣌͠ͷϩδοΫΛॻ͘ͳΒςετ ͠Α͏Ͷɻ w·͋Γ্͕͍͍͔ͬͨ͠ɻʢࢮʣ ·ͱΊ
͓ΘΓ !UPN[PI ͓ΘΓ
༨ஊ
None
None
GPSUFFKQ ϑ Υ ϧ ς wΧϯϑΝϨϯεӡӦࢧԉπʔϧ wεϙϯαʔืू ٻॻ࡞ʢ.JTPDB࿈ܞʣ ϩΰड͚औΓ Ұ੪ϝʔ
ϧ εϙϯαʔҰཡ"1* wϓϩϙʔβϧืूʢ$G1ʣ બఆ λΠϜςʔϒϧΤσΟλ Ұ੪ϝʔϧ ϓϩϙʔβϧҰཡ"1* λΠϜςʔϒϧදࣔ w4MBDL࿈ܞͯ͠εϙϯαʔԠืϓϩϙʔβϧԠื࣌ʹօͰΓ্͕Δ wνέοτൢച࣌&WFOUCSJUF࿈ܞͯ͠ࢀՃऀऔΓࠐΈ 5XJUUFSΞΠί ϯऔΓࠐΈ 23ίʔυੜ $47μϯϩʔυ ͦͷ··ҹ͞Μʹೖߘͯ͠ΞΠίϯ໊͖ࡳ wͦͷଞػೳ͍Ζ͍ΖʢνϟϨϯδػೳ͋ΔΑʣ
GPSUFFKQ ϑ Υ ϧ ς wЌӡ༻த w·͍ͩʹ͔ͬͨ͘Γ͔Γʹ͍͘ͱ͜Ζ͋Δ wόάେͳ͘ͳͬͨ w୩ͷΓ߹͍ͷํͰ͋Εൺֱత ҆৺ͯ͑͠ΔͷͰ
͝૬ஊ͍ͩ͘͞