XAMMP で PHP と MySQL または PhpMyAdmin を使用して、ページェント スコアリング システムを作成しています。MySQLを使って何とか候補の順位を掴みましたが、同点の場合もあります。PHP を使用してクエリの結果からタイを破るにはどうすればよいですか?
候補者の順位は、審査員 5 名、候補者 9 名の各部門の点数によるものです。そのため、PHPで何をすべきか、または解決する方法が本当にわかりません。
C4 ではなく C9 を 1 位にしたい場合はどうすればよいでしょうか?
これが私のデータベースです...誰かが私を助けてくれることを願っています。前もって感謝します。
CREATE TABLE IF NOT EXISTS score (
candidate_no varchar(5) NOT NULL ,
category_no varchar(5) NOT NULL ,
judge_id varchar(5) NOT NULL ,
score int(3),
PRIMARY KEY (candidate_no,category_no,judge_id),
KEY score_fkey (judge_id),
KEY score_fkey3 (category_no)) ;
INSERT INTO score (candidate_no, category_no, judge_id, score) VALUES
('C1', 'cat1', 'J1', 17),
('C1', 'cat1', 'J2', 15),
('C1', 'cat1', 'J3', 17),
('C1', 'cat1', 'J4', 18),
('C1', 'cat1', 'J5', 19),
('C2', 'cat1', 'J1', 17 ),
('C2', 'cat1', 'J2', 15 ),
('C2', 'cat1', 'J3', 16 ),
('C2', 'cat1', 'J4', 18 ),
('C2', 'cat1', 'J5', 18 ),
('C3', 'cat1', 'J1', 15 ),
('C3', 'cat1', 'J2', 20 ),
('C3', 'cat1', 'J3', 19 ),
('C3', 'cat1', 'J4', 16 ),
('C3', 'cat1', 'J5', 19 ),
('C4', 'cat1', 'J1', 19 ),
('C4', 'cat1', 'J2', 20 ),
('C4', 'cat1', 'J3', 18 ),
('C4', 'cat1', 'J4', 18 ),
('C4', 'cat1', 'J5', 19 ),
('C5', 'cat1', 'J1', 18 ),
('C5', 'cat1', 'J2', 16 ),
('C5', 'cat1', 'J3', 18 ),
('C5', 'cat1', 'J4', 18 ),
('C5', 'cat1', 'J5', 18 ),
('C6', 'cat1', 'J1', 20 ),
('C6', 'cat1', 'J2', 16 ),
('C6', 'cat1', 'J3', 16 ),
('C6', 'cat1', 'J4', 16 ),
('C6', 'cat1', 'J5', 17 ),
('C7', 'cat1', 'J1', 11 ),
('C7', 'cat1', 'J2', 12 ),
('C7', 'cat1', 'J3', 14 ),
('C7', 'cat1', 'J4', 15 ),
('C7', 'cat1', 'J5', 17 ),
('C8', 'cat1', 'J1', 15 ),
('C8', 'cat1', 'J2', 16 ),
('C8', 'cat1', 'J3', 18 ),
('C8', 'cat1', 'J4', 17 ),
('C8', 'cat1', 'J5', 17 ),
('C9', 'cat1', 'J1', 19 ),
('C9', 'cat1', 'J2', 19 ),
('C9', 'cat1', 'J3', 19 ),
('C9', 'cat1', 'J4', 19 ),
('C9', 'cat1', 'J5', 18 );
これは私のクエリです:
select sum
,candidate_no
,@curRank := @curRank + 1 AS rank
from(
select sum(score) / 5 sum
,candidate_no
from score
where candidate_no = 'c1'
union
select sum(score) / 5 sum
,candidate_no
from score
where candidate_no = 'c2'
union
select sum(score) / 5 sum
,candidate_no
from score
where candidate_no = 'c3'
union
select sum(score) / 5 sum
,candidate_no
from score
where candidate_no = 'c4'
union
select sum(score) / 5 sum
,candidate_no
from score
where candidate_no = 'c5'
union
select sum(score) / 5 sum
,candidate_no
from score
where candidate_no = 'c6'
union
select sum(score) / 5 sum
,candidate_no
from score
where candidate_no = 'c9'
) a , (SELECT @curRank := 0) r
order by sum desc
結果は..
sum | candidate_no | rank
18.8000 | C4 | 1
18.8000 | C9 | 2
17.8000 | C3 | 3
17.6000 | C5 | 4
17.2000 | C1 | 5
17.0000 | C6 | 6
16.8000 | C2 | 7
16.6000 | C8 | 8
13.8000 | C7 | 9