Cách tính điểm trong php?

Gần đây, một người bạn của tôi đã tiếp cận tôi để xin lời khuyên về nhiệm vụ đạt thứ hạng dựa trên điểm số. Khi chúng ta có một danh sách, chẳng hạn, những người chơi, mỗi người có một số điểm số, thì đương nhiên những điểm này được sử dụng để sắp xếp các người chơi trên bảng điểm. Mặc dù để tạo bảng điểm là một nhiệm vụ tầm thường - chỉ cần sắp xếp bảng theo điểm số,

 SELECT * FROM players ORDER BY score DESC

để có được thứ hạng của một người chơi dựa trên điểm số của họ không đơn giản

Đáng ngạc nhiên là không có giải pháp tốt nào trên Stack Overflow [ví dụ: kết quả hàng đầu từ Google đối với tôi]. Thay vào đó, một số quái vật SQL được cung cấp, sử dụng các biến, các hàm dành riêng cho DBMS như RANK[], các bảng dẫn xuất, v.v. Nhưng tôi cảm thấy rằng giải pháp có thể đơn giản hơn nhiều và có thể được thực hiện chỉ bằng các toán tử SQL cơ bản

nguyên tắc cơ bản

Giải pháp cơ bản, cho điểm đã biết, đơn giản đến nực cười. chúng ta chỉ cần đếm tất cả người chơi được đặt trên bảng điểm trước. Đương nhiên, điều đó có nghĩa là chúng ta cần tính tất cả người chơi có điểm cao hơn giá trị đã cho

SELECT count[*] FROM players WHERE score > ?

Chơi lô tô?

Vẫn chưa. Truy vấn này chỉ cung cấp cho chúng tôi số lượng người chơi trước chúng tôi, trong khi thứ hạng của chúng tôi lớn hơn một điểm. Vì vậy, truy vấn thích hợp sẽ là

SELECT count[*]+1 FROM players WHERE score > ?

Chơi lô tô?

Vẫn chưa

Thêm trường khác

Vâng, có một cạm bẫy. có thể xảy ra trường hợp một số người dùng sẽ có cùng số điểm. Một mặt, chúng tôi có thể cung cấp cho những người dùng như vậy cùng một thứ hạng. Điều đó là có thể, nhưng nó sẽ làm cho truy vấn trở nên quá phức tạp. Bên cạnh đó, cách tiếp cận như vậy hiếm khi được sử dụng vì mọi người muốn chắc chắn về thứ hạng của họ. Để làm rõ mọi thứ, một trường bổ sung thường được sử dụng trong mệnh đề ORDER BY khi hiển thị bảng điểm, để làm cho danh sách kết quả nhất quán. Nó có thể là bất kỳ trường nào - ví dụ tên hoặc id của người chơi. Nhưng có vẻ công bằng khi sử dụng thời gian khi số điểm hiện tại đã đạt được - người đến trước sẽ cao hơn trên bảng điểm

SELECT * FROM players ORDER BY score DESC, score_updated ASC

Do đó, để hiển thị thứ hạng, chúng ta cũng cần xem xét trường khác này

Điều đầu tiên xuất hiện trong đầu tôi [tốt, ít nhất là tôi đã nghĩ ra, tôi phải thú nhận] đơn giản là thêm trường mới vào điều kiện

SELECT count[*]+1 FROM players WHERE score > ? AND score_updated  ?
0. Nhưng vâng, chỉ cần thay đổi AND thành OR sẽ phá hỏng kết quả. Đến lúc này, tôi bắt đầu hình dung bảng người chơi như một loại đường thẳng, trong đó chúng tôi có một phần dành cho tất cả những người chơi có điểm số cao hơn và một phần dành cho những người bạn có cùng số điểm, như thế này

                       me
===================|===*====
     superiors       peers

và giải pháp ngay lập tức nảy ra trong đầu tôi. chúng ta chỉ cần đếm riêng hai phần này

SELECT count[*]+1 FROM players WHERE score > ? OR [score = ? AND score_updated  [SELECT score FROM players WHERE id = ?]

nhưng đó chỉ là một điều kiện và chúng tôi có hai. Nó sẽ biến con quái vật SQL mà chúng ta đang cố tránh. May mắn thay, có một cách khác để lấy dữ liệu từ cùng một hàng, bằng cách nối bảng với chính nó

________số 8

truy vấn sau này chỉ là một THAM GIA TRÁI quen thuộc với số đếm [] - điều gì có thể đơn giản hơn?

Ghi chú. một chỉ mục cho

SELECT count[*] FROM players WHERE score > ?
0 không được quên. Trường này được sử dụng nhiều trong truy vấn này và nếu không có chỉ mục, cơ sở dữ liệu sẽ phải lục tung toàn bộ bảng. Trong khi sử dụng một chỉ mục, nó sẽ chỉ tính toán các mục trong chỉ mục, nhanh hơn không thể so sánh được

Làm cách nào để tính điểm bài kiểm tra trong PHP?

$_GET['a'. $x]] ; . $score.

Làm cách nào để tính tỷ lệ phần trăm điểm trong PHP?

Chia $percentage cho 100 và nhân với $totalWidth . toán đơn giản. trong trường hợp loại là một số nguyên thì tốt hơn là bạn nhân trước, sau đó chia cho 100. Ví dụ khi chia trước. câu trả lời int = 50/100 = 0. 5 [int làm tròn 0. 5 đến 1]; .

Làm cách nào để tạo máy tính trong mã PHP?

Code. Num1: Num2:

Chủ Đề