Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Tính thứ hạng trong PHP / MySQL

Nếu bạn muốn xếp hạng tổng thể, bạn không may phải sắp xếp toàn bộ bảng. Nói một cách đơn giản, bạn không thể biết thứ hạng của ai đó trong bảng nếu không biết các thứ hạng khác trong bảng.

Điều đó nói rằng, nếu bạn lo lắng về hiệu suất, có một giải pháp khá dễ dàng ở đây - lưu trữ kết quả của truy vấn xếp hạng của bạn (có thể vào một bảng MySQL khác!) Và truy vấn cho tất cả các lần đọc của bạn. Khi ai đó đăng một điểm mới, hãy tính toán lại bảng tạm thời của bạn. Bạn có thể xóa định kỳ tất cả các bản ghi theo một thứ hạng nhất định (giả sử, bất kỳ ai xếp hạng dưới 100 sẽ bị xóa khỏi bảng điểm) để giữ cho việc tính toán lại nhanh chóng, vì không ai có thể leo lên xếp hạng sau khi bị hạ bởi một số điểm cao hơn.

# Create your overall leaderboards once
create table leaderboards (rank integer primary key, score_id integer, game varchar(65), user_id integer, index game_user_id_idx (game, user_id))


# To refresh your leaderboard, we'll query the ranks for the game into a temporary table, flush old records from scores, then copy
# the new ranked table into your leaderboards table.
# We'll use MySQL's CREATE TABLE...SELECT syntax to select our resultset into it directly upon creation.
create temporary table tmp_leaderboard (rank integer primary key auto_increment, score_id integer, game varchar(65), user_id integer)
  select ID, GameName, UserID, from scores where GameName = '$game' order by score desc;

# Remove old rankings from the overall leaderboards, then copy the results of the temp table into it.
delete from leaderboards where game = '$game';
insert into leaderboards (rank, score_id, game, user_id)
  select rank, score_id, game, user_id from tmp_leaderboard;

# And then clean up the lower scores from the Scores table
delete from scores join tmp_leaderboard on scores.id = tmp_leaderboard.score_id, scores.GameName = tmp_leaderboard.game where tmp_leaderboard.rank < 100;

# And we're done with our temp table
drop table tmp_leaderboard;

Sau đó, bất cứ khi nào bạn muốn đọc thứ hạng cho một trò chơi:

select rank from leaderboards where game = '$game' and user_id = '$user_id';


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lựa chọn động các tùy chọn php và mysql

  2. Làm cách nào để kiểm tra cài đặt InnoDB của tôi?

  3. LỖI 2003 (HY000):Không thể kết nối với máy chủ MySQL trên '127.0.0.1' (111)

  4. Viết hoa chữ cái đầu tiên. MySQL

  5. Giới hạn quyền truy cập hàng ngày