一、条件
1.本教程使用的环境是WAMP,附上环境安装教程WAMP安装教程
2.完成php环境测试,能够正常打开php页面,详见http://www.u3d8.com/?p=1597 (只需测试前两步骤即可)
3.本教程使用的MySqlHelper类来对数据库的增删改查,具体操作请见:http://www.u3d8.com/?p=1606
当上面三个教程都操作完成后,可以继续本教程的学习。
二、创建数据表
打开phpMyAdmin,添加test数据库名称、rank数据表
根据下图,在rank数据表里添加两条字段
三、修改MySqlHelper.php
1 |
define('DB_DBNAME', 'test'); |
四、新建排行榜脚本
在MySqlHelper.php同级目录新建ranklist.php脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
<?php require_once 'MySqlHelper.php'; //echo json_encode($data); // 转成json输出 $db = new MySqlHelper(); // 连接数据库 $link = $db->connect(); //print_r($link); // 表名称 $table = "rank"; // 对应自己要操作的表名称 // 查找所有数据 $sqlDatas = array(); $sql="SELECT * FROM {$table}"; $sqlDatas = $db->fetchAll($sql); // 通过name 查找对应数组元素 $searchValue = $_GET["name"]; if($sqlDatas != null) $searchResult = array_filter($sqlDatas, function($t) use ($searchValue) { return $t['name'] == $searchValue; }); // 如果没有这个name,则新增加 if($sqlDatas == null || count($searchResult) == 0) { $db->insert($_GET, $table); $sql="SELECT * FROM {$table}"; $sqlDatas = $db->fetchAll($sql); } // 如果已有这个name,且最新分数高于历史得分,则更新数据库 else if($_GET["score"] > current(array_values($searchResult))["score"]) { $db->update($_GET, $table, 'name="'.$_GET["name"].'"'); } $sql="SELECT * FROM {$table}"; $sqlDatas = $db->fetchAll($sql); // 根据score排序 foreach ( $sqlDatas as $key => $row ){ $score[$key] = $row ['score']; } array_multisort($score, SORT_DESC, $sqlDatas); //var_dump($sqlDatas); // 获取排名 $searchResult = array_filter($sqlDatas, function($t) use ($searchValue) { return $t['name'] == $searchValue; }); $rank = array_keys($sqlDatas,current(array_values($searchResult)),true)[0] + 1; class FeedBack{ public $rank; public $all; } $feedBack = new FeedBack(); $feedBack->rank = $rank; $feedBack->all = count($sqlDatas); // 给客户端返回排名 echo json_encode($feedBack); // 关闭数据库连接 $db->close($link); ?> |
五、测试排行榜
因为ranklist.php中使用的是GET接收消息,所以我们可以直接在地址栏进行测试
在浏览器打开
1 |
http://localhost/test/ranklist.php?name=wangchong1&score=100 |
查看输出结果
继续测试
1 |
http://localhost/test/ranklist.php?name=wangchong2&score=80 |
查看输出结果
继续测试
1 |
http://localhost/test/ranklist.php?name=wangchong3&score=90 |
查看输出结果
结束语
这里已经实现了排行榜的基础功能,大家可以在此基础进行代码优化以及补充自己需要内容。
本教程仅供自行学习,测试使用。商业项目中,不要频繁访问数据库,可以使用Redis\Memcached来做数据缓存
- 本文固定链接: http://www.u3d8.com/?p=1710
- 转载请注明: 网虫虫 在 u3d8.com 发表过