0

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
4

2 に答える 2

0

2 番目の ORDER BY 変数を追加できるので、最初に合計で並べ替え、次に候補番号で並べたい場合は、「ORDER BY sum desc、candidate_no desc」になります。2番目。

于 2013-07-15T15:06:11.063 に答える