私はプロジェクトに取り組んでおり、スキーマやクエリに変更が必要な場合や、変更が必要な場合は素早く参照したいと思っています。ランキングシステムを実装するにはどうすればいいですか
プロジェクトランキングは/試合
- +2ポイントは優勝チームに与えられる大会で得点規則に基づいて行われますバドミントンチームのためのランキングシステムを作成する方法についてです。
- マッチがクォーターフィナーレの場合、勝利チームにエクストラ+1ポイントが授与されます。
- セミファイナルの場合は、追加の+2ポイントが勝利チームに授与されます。
- ファイナルがファイナルだった場合、追加の+5ポイントが勝ちチームに授与されます。
- すべてのプールマッチを獲得すると、チームの得点に4点が加算されます。
- 3つ以上のトーナメントを獲得すると、あなたのチームに15ポイントが加算されます。私は、次の表
プレーヤー
+----------+-------------------------------------+------+-----+-------------- | Field | Type | Null | Key | +----------+-------------------------------------+------+-----+-------------- | id | int(11) | NO | PRI | | name | varchar(250) | NO | | | image | text | YES | | | plays | enum('RH','LH') | NO | | | added_on | datetime | NO | | | status | enum('active','inactive','retired') | NO | | +----------+-------------------------------------+------+-----+--------------
チーム
+------------+----------------------------+------+-----+-------------------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------+----------------------------+------+-----+-------------------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | name | varchar(150) | NO | UNI | NULL | | | image | text | YES | | NULL | | | status | enum('active','in-active') | NO | | active | | | added_on | datetime | NO | | CURRENT_TIMESTAMP | | | updated_on | datetime | YES | | NULL | | +------------+----------------------------+------+-----+-------------------+----------------+
プレイヤーにチームを作成することによって開始
+-----------+---------------------------+------+-----+-------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+---------------------------+------+-----+-------------------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| player_id | int(11) | NO | MUL | NULL | |
| team_id | int(11) | NO | | NULL | |
| status | enum('active','inactive') | NO | | NULL | |
| added_on | datetime | NO | | CURRENT_TIMESTAMP | |
+-----------+---------------------------+------+-----+-------------------+----------------+
トーナメント
+-------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(255) | NO | | NULL | |
| year | int(4) | NO | | NULL | |
+-------+--------------+------+-----+---------+----------------+
マッチ
+---------------+---------------------------------------+------+-----+-------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------+---------------------------------------+------+-----+-------------------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| team_one | int(11) | NO | MUL | NULL | |
| team_two | int(11) | NO | | NULL | |
| winner_id | int(11) | NO | | NULL | |
| tournament_id | int(11) | NO | MUL | 1 | |
| added_on | datetime | NO | | CURRENT_TIMESTAMP | |
| match_type | enum('pool','quarter','semi','final') | NO | | pool | |
| sets | smallint(2) | NO | | 1 | |
+---------------+---------------------------------------+------+-----+-------------------+----------------+
マッチスコア
+----------+-------------------+------+-----+-------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------------+------+-----+-------------------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| match_id | int(11) | NO | MUL | NULL | |
| team_id | int(11) | NO | MUL | NULL | |
| set_num | enum('1','2','3') | NO | | NULL | |
| score | smallint(2) | NO | | NULL | |
| added_on | datetime | NO | | CURRENT_TIMESTAMP | |
+----------+-------------------+------+-----+-------------------+----------------+
の
プールあなたは私がランクスコアを任意の場所に保存していないと私は
SELECT
T.id, T.name, T.status,
IFNULL(T.image,'no-image.png') as DP,
(SELECT COUNT(*)
FROM badminton_matches M
WHERE (M.team_one = T.id OR M.team_two = T.id)) as played,
(SELECT COUNT(*)
FROM badminton_matches M
WHERE M.winner_id = T.id) as won,
(SELECT COUNT(*)
FROM badminton_matches M
WHERE ((M.team_one = T.id OR M.team_two = T.id)
AND (M.winner_id != T.id))) as lost,
(
((SELECT COUNT(*)
FROM badminton_matches M
WHERE M.winner_id = T.id) * 2) +
(((SELECT COUNT(*)
FROM badminton_matches M
WHERE (M.match_type = 'quarter'
AND M.winner_id = T.id)) * 2) + 1) +
(((SELECT COUNT(*)
FROM badminton_matches M
WHERE (M.match_type = 'semi'
AND M.winner_id = T.id)) * 2) + 2) +
(((SELECT COUNT(*)
FROM badminton_matches M
WHERE (M.match_type = 'final' AND M.winner_id = T.id)) * 2) + 5)) as Points
FROM
badminton_teams T
ORDER BY
(Points) DESC;
まず次のクエリを使用して、実行時にそれを計算していますことに気づくでしょう
+---------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(10) | NO | UNI | NULL | |
| tournament_id | int(11) | NO | MUL | NULL | |
+---------------+-------------+------+-----+---------+----------------+
一つ
クエリを使用して実行時に得点を計算するのは正しいですか
は、私は、この目的の
編集用のcronジョブをスケジュールする必要があり、それを私はデータベース
または
- で試合結果を保存するたびに更新し保存する必要があります。
クエリを次のように更新しました
SELECT T.id, T.name,T.status, IFNULL(T.image,'no-image.png') as DP, (SELECT COUNT(*) FROM badminton_matches M WHERE ((M.team_one =T.id or M.team_two = T.id) and M.winner_id IS NOT NULL)) as played, (SELECT COUNT(*) FROM badminton_matches M WHERE M.winner_id=T.id) as won, (SELECT COUNT(*) FROM badminton_matches M WHERE ((M.team_one =T.id or M.team_two = T.id) AND (M.winner_id!=T.id))) as lost, ((SELECT (SUM(BMS.points_won)-SUM(BMS.points_lost)) FROM badminton_match_score BMS JOIN badminton_matches M ON (M.id=BMS.match_id) where M.team_one=T.id OR M.team_two=T.id and M.winner_id is not null)/(SELECT COUNT(*) FROM badminton_matches M WHERE ((M.team_one =T.id or M.team_two = T.id) and M.winner_id IS NOT NULL))) AS AVG_SCORE, ( ((SELECT COUNT(*) FROM badminton_matches M WHERE M.winner_id=T.id)*2) + (SELECT COUNT(*) FROM badminton_matches M WHERE (M.match_type='quarter' AND M.winner_id=T.id)) + ((SELECT COUNT(*) FROM badminton_matches M WHERE (M.match_type='semi' AND M.winner_id=T.id))*2) + ((SELECT COUNT(*) FROM badminton_matches M WHERE (M.match_type='final' AND M.winner_id=T.id))*5) ) as Points FROM badminton_teams T order by (Points) DESC, lost ASC, AVG_SCORE DESC
このクエリの1つの問題は、チームがまだ試合をしていなくても、あなたに8ポイントを与えることです –