Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ランキング実装に失敗するとこうなるという例 / Broken ranking
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
HASEGAWA Tomoki
April 24, 2019
Technology
630
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ランキング実装に失敗するとこうなるという例 / Broken ranking
PHP勉強会@東京 #134 の資料です。
HASEGAWA Tomoki
April 24, 2019
More Decks by HASEGAWA Tomoki
See All by HASEGAWA Tomoki
3Dプリンタでコレはこう作る! - マルチディスプレイ用モニタアームマウンタの作り方 / Made with a 3D Printer: DIY Multi-Display Monitor Arm Mount
tomzoh
0
93
デシリアライゼーションを理解する / Inside Deserialization
tomzoh
0
950
PHPer Book Revue: CPUの創りかた / How to Build a CPU
tomzoh
0
91
超入門3Dプリンタ: 生活を便利にするモノを作ろう / Getting Started with 3D Printing: Making small things that quietly improve your daily life.
tomzoh
0
92
最新ハードウェアの中の8ビットCPU / The Hidden Power of 8-Bit CPUs in Modern Hardware
tomzoh
0
170
PHPからはじめるコンピュータアーキテクチャ / From Scripts to Silicon: A Journey Through the Layers of Computing Hiroshima 2025 Edition
tomzoh
0
430
PHPからはじめるコンピュータアーキテクチャ / From Scripts to Silicon: A Journey Through the Layers of Computing
tomzoh
5
890
低レイヤを知りたいPHPerのためのCコンパイラ作成入門 完全版 / Building a C Compiler for PHPers Who Want to Dive into Low-Level Programming - Expanded
tomzoh
6
4.8k
カンファレンスのつくりかた / The Conference Code: What Makes It All Work
tomzoh
11
2.4k
Other Decks in Technology
See All in Technology
Agent Skills設計で柔軟性と硬さのバランスが難しい話
nassy20
0
130
AmazonRoute 53ではじめてのドメイン取得!HTTPS化までの道のりを整理してみた
usanchuu
3
140
FinOps × AIエージェントで実現する コストインシデントの自動調査
oasis1994liveforever
0
140
【NRUG vol.18】KubernetesにおけるNew Relicデータ取得量削減の考え方
nrug_member
0
120
AIソロプレナー時代に2ヶ月で20人増員した事業創造会社の開発組織の話
miyatakoji
0
660
2026TECHFRESH畢業分享會 - 原生還是跨平台? App 開發踩坑實錄
line_developers_tw
PRO
0
1k
失敗を資産に変えるClaude Code
shinyasaita
0
650
AGENTS.mdとSkillsで始めるAIエージェント活用
sonoda_mj
3
210
AIっぽい文章を採点して人間らしく直すアプリを作ってみた
yama3133
2
180
気軽に使える"情報のハブ"としてのNotion活用 〜フロー情報の集積点 と、 Claude Code × Notion AI〜
syucream
1
110
小さく始める AI 活用推進 ― 日経電子版 Web チームの事例/nikkei-tech-talk47
nikkei_engineer_recruiting
0
270
SONiCのLinuxベースを活かしたZabbix監視
sonic
0
160
Featured
See All Featured
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
62
44k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
210
Building a Scalable Design System with Sketch
lauravandoore
463
34k
We Have a Design System, Now What?
morganepeng
55
8.2k
The Curious Case for Waylosing
cassininazir
1
390
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
390
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.9k
Chasing Engaging Ingredients in Design
codingconduct
0
220
The browser strikes back
jonoalderson
0
1.2k
Amusing Abliteration
ianozsvald
1
200
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
580
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୩ͷΓ߹͍ͷํͰ͋Εൺֱత ҆৺ͯ͑͠ΔͷͰ
͝૬ஊ͍ͩ͘͞