MySQL 计算每科成绩和并以降序排列 作者: Chuwen 时间: 2020-05-08 分类: MySQL 评论 # 问题 > 查询各个学生总成绩,并按总分从高到底排序 也就是要将 `Chinese`、`Math`、`...`、`Biology` 字段都加起来然后排列 # 有以下表 ``` +----+--------+-----+------------------+---------+---------+------+---------+-----------+---------+ | ID | Name | Age | Job | Chinese | English | Math | Physics | Chemistry | Biology | +----+--------+-----+------------------+---------+---------+------+---------+-----------+---------+ | 1 | 王建军 | 30 | Java讲师 | 100 | 98 | 99 | 96 | 97 | 100 | | 2 | 常庆林 | 28 | Linux讲师 | 100 | 100 | 98 | 93 | 99 | 96 | | 3 | 徐培成 | 35 | BigData讲师 | 100 | 100 | 100 | 98 | 96 | 100 | | 4 | 李永强 | 30 | javaEE开发工程师 | 100 | 93 | 91 | 74 | 89 | 100 | | 5 | 赵子昂 | 24 | python开发工程师 | 98 | 93 | 91 | 74 | 89 | 100 | | 6 | 桂阳 | 25 | C++开发工程师 | 100 | 98 | 93 | 91 | 99 | 82 | | 7 | 肖云龙 | 24 | Golang开发工程师 | 93 | 97 | 85 | 100 | 93 | 69 | | 8 | 李洋 | 23 | C#开发工程师 | 100 | 98 | 99 | 96 | 97 | 100 | | 9 | 卜孟龙 | 30 | BigData开发 | 98 | 93 | 100 | 100 | 73 | 92 | | 10 | 罗大鹏 | 22 | Java开发工程师 | 100 | 84 | 91 | 87 | 100 | 93 | | 11 | 尹正杰 | 18 | 高级运维工程师 | 100 | 100 | 100 | 100 | 100 | 100 | +----+--------+-----+------------------+---------+---------+------+---------+-----------+---------+ ``` # 解决思路 我当时就想着用 ``` SELECT SUM(`Chinese`+`Math`+`English`+`Physics`+`Chemistry`+`Biology`) AS 'total' FROM `classmate` ORDER BY `total` DESC; ``` 结果运行结果是: > 这显然不是我们要的结果 ``` mysql> SELECT SUM(`Chinese`+`Math`+`English`+`Physics`+`Chemistry`+`Biology`) AS 'total' FROM `classmate` ORDER BY `total` DESC; +-------+ | total | +-------+ | 6263 | +-------+ 1 row in set (0.02 sec) ``` --- 然后我就 Google 搜啊搜,搜了很久很久(真的好久...)。终于找到了一个合适的结果,原文链接:https://segmentfault.com/q/1010000002894877 ### 得知应该是这样的: ``` SELECT *,( Chinese + Math + English + Physics + Chemistry + Biology ) AS total FROM classmate ORDER BY `total` DESC ``` ### 运行结果完美,是我想要的结果 ``` mysql> SELECT *,( Chinese + Math + English + Physics + Chemistry + Biology ) AS total FROM classmate ORDER BY `total` DESC; +----+--------+-----+------------------+---------+---------+------+---------+-----------+---------+-------+ | ID | Name | Age | Job | Chinese | English | Math | Physics | Chemistry | Biology | total | +----+--------+-----+------------------+---------+---------+------+---------+-----------+---------+-------+ | 11 | 尹正杰 | 18 | 高级运维工程师 | 100 | 100 | 100 | 100 | 100 | 100 | 600 | | 3 | 徐培成 | 35 | BigData讲师 | 100 | 100 | 100 | 98 | 96 | 100 | 594 | | 8 | 李洋 | 23 | C#开发工程师 | 100 | 98 | 99 | 96 | 97 | 100 | 590 | | 1 | 王建军 | 30 | Java讲师 | 100 | 98 | 99 | 96 | 97 | 100 | 590 | | 2 | 常庆林 | 28 | Linux讲师 | 100 | 100 | 98 | 93 | 99 | 96 | 586 | | 6 | 桂阳 | 25 | C++开发工程师 | 100 | 98 | 93 | 91 | 99 | 82 | 563 | | 9 | 卜孟龙 | 30 | BigData开发 | 98 | 93 | 100 | 100 | 73 | 92 | 556 | | 10 | 罗大鹏 | 22 | Java开发工程师 | 100 | 84 | 91 | 87 | 100 | 93 | 555 | | 4 | 李永强 | 30 | javaEE开发工程师 | 100 | 93 | 91 | 74 | 89 | 100 | 547 | | 5 | 赵子昂 | 24 | python开发工程师 | 98 | 93 | 91 | 74 | 89 | 100 | 545 | | 7 | 肖云龙 | 24 | Golang开发工程师 | 93 | 97 | 85 | 100 | 93 | 69 | 537 | +----+--------+-----+------------------+---------+---------+------+---------+-----------+---------+-------+ 11 rows in set (0.05 sec) ```
PHP 版超星学习通自动签到,支持多用户签到、手势、二维码、位置签到、HTTP API 调用,二次开发便捷! 作者: Chuwen 时间: 2020-05-01 分类: PHP 3 条评论 # ⭐ ChaoxingSign | 超星学习通签到 PHP 版超星学习用自动签到,支持多用户签到,二次开发便捷! `PHP 7.3` 测试通过,理应 `PHP 5.4` 及以上都能够使用 - 登录方式: 支持手机号码登录,暂时不支持学号登陆!!! - 签到功能: 支持普通签到,手势签到,二维码签到,位置签到,拍照签到 # ? 更新日志 2020/06/13 - 修复 #2 的问题,配置了 Server酱但不推送的问题 - 更改 判断时间区间的方法 - 添加 获取课程列表失败,重试2次以判断是API错误 2020/05/27 - 修复 #1 - 更改 获取课程、签到 API - 添加 手势、位置、二维码一键签到 - 添加 Server酱 微信推送,需要配置 `config.php` 文件 2020/05/25 - 更改 登录接口,原接口已经失效 # ? TODO - [] 接入钉钉机器人 API # ? 使用方法 1. 下载源码: 直接下载:https://github.com/PrintNow/ChaoxingSign/archive/master.zip 克隆源码:`git clone https://github.com/PrintNow/ChaoxingSign` 2. ? 运行 1. 上传到**网站根目录**运行 然后访问 `http://你的域名/main.php?account=你的超星账号&password=你的超星密码` 2. 或者使用**命令行**运行 ``` php main.php -A "你的超星账号" -P "你的超星密码" ``` 3. ⚙ 实现自动签到 > 推荐大于等于 **10 分钟** 执行一次,避免出现异常 > > 我已经硬编仅能在每天的 08:00 ~ 22:00 之间运行, > 如果要取消或修改这一限制,请删除或注释 > `main.php` 第 7~9 行 1. 如果以**网页方式**运行,定时监控 `http://你的域名/main.php?account=你的超星账号&password=你的超星密码` 即可 2. 如果使用**命令行方式**运行,添加 `crontab` 任务即可,具体添加 `crontab 任务` 方法可以网上搜。 每天 早上8点到晚上22点之间,每10分钟签到一次 crontab 表达式:`0 */10 8-22 * * * *` # √ 运行输出 签到成功: ``` 正在签到:陈半仙@测试班级 [2020-06-13 11:44:14]签到成功 Server酱 消息推送成功 ``` 没有签到任务: ``` 没有待签到的任务 ``` # ❗ 注意 超星**可能**屏蔽了如 阿里云、腾讯云、百度云... 等 IDC IP 地址,故有可能出现未知的错误(我没测试,我仅在家庭宽带中测试成功) # ? 感谢 > 本项目的实现参考了以下文章 - https://www.z2blog.com/index.php/learn/423.html - https://www.z2blog.com/index.php/default/459.html > 本项目中使用到的 `Selector.php` 来自 [PHPSpider](https://github.com/owner888/phpspider) # License 遵循 [MIT License](./LICENSE) 协议 ## 其它版本签到脚本推荐 > 排名不分先后 | 项目地址 | 开发语言 | 备注 | | ------------------------------------------------------- | ---------- | ------------------------------------------ | | https://github.com/mkdir700/chaoxing_auto_sign | Python | 超星学习通自动签到脚本&多用户多任务&API | | https://github.com/Wzb3422/auto-sign-chaoxing | TypeScript | 超星学习通自动签到,梦中刷网课 | | https://github.com/aihuahua-522/chaoxing-testforAndroid | Java | 学习通(超星)自动签到 | | https://github.com/yuban10703/chaoxingsign | Python | 超星学习通自动签到 | | https://github.com/Huangyan0804/AutoCheckin | Python | 学习通自动签到,支持手势,二维码,位置,拍照等 |
历史上的今天 免费API 开发文档 作者: Chuwen 时间: 2020-04-18 分类: 唠嗑闲聊 评论 # 关于本 API 数据库已开源,详细请访问:[https://nowtime.cc/php/922.html][1] # ⌨ API 字段说明 ## ? 请求 > 使用 GET 方法请求 `https://api.nowtime.cc/v1/today_in_history` > > 例子,获取*1月1日*,降序排序:`https://api.nowtime.cc/v1/today_in_history?month=1&day=1&order=asc` |字段|说明| |---|---| |month|月份。默认值是本月,你可以输入 `1~12` 之间的数字| |day|日期。默认值是今天,你可以输入 `1~31` 之间的数字| |order|排序方式。根据 **年份**排序,默认值是 `desc` 降序(从大到小),你可以输入 `desc` 或 `asc` | ## ◀ 返回 |字段|类型|说明| |---|---|---| |code|int|**[必有]** 状态码,正常返回 `200`,其它包括数据不存在都返回如 500、-1| |msg|string|**[必有]** 信息,正常返回 `ok`,非 `200` 状态码返回**错误原因**| |count|int|历史上的今天返回数量| |disclaimer|string|**[必有]** 免责声明,可以自己在 `api.php` 第82行 进行修改| |data|array|历史上的今天 数据,字段说明请看下方| |---|---|---| |year|int|**[必有]** 年份,如果前面带有有负号 `-`,则代表是**公元前**| |month|int|**[必有]** 月份| |type|int|**[必有]** 事件类型,1:大事件,2:出生,3:逝世| |data|string|**[必有]** 事件信息,如果当天有多个事件,将以 `${{delimiter}}` 作为分隔符进行分割。PHP 可以使用 `explode()` 函数进行分割,JavaScript 可以使用 `split` 方法进行分割| > 请注意,以下是我进行了修改的,实际返回条数不止 **2条** ``` { "code": 200, "msg": "ok", "count": 2, "disclaimer": "数据源于“维基百科”,经过加工后为您呈现本数据,数据采集于 2020\/04\/12 12:00,在此之后一些数据可能发生了改变,请以事实为准!本站不承担任何因数据改变而造成的任何责任", "data": [{ "year": 2020, "month": 1, "day": 1, "type": 3, "data": "大卫·斯特恩,前任美国国家篮球协会总裁(1942年出生)" }, { "year": 2019, "month": 1, "day": 1, "type": 1, "data": "中华民国实施大型餐饮业如连锁速食店等,内用将禁止提供塑胶吸管的规定[3][4];中华民国依法届期终止第三代行动通讯(3G)业务。" }] } ``` [1]: https://nowtime.cc/php/922.html
Nginx 暴力解决使用 CDN/负载均衡后日志里记录的 IP 不是用户真实 IP | Nginx 获取真实用户 IP 作者: Chuwen 时间: 2020-04-17 分类: Nginx 评论 # 暴力配置 > 修改 `nginx.conf` 或 `vhost.conf` 之类的文件,将以下配置放在 `http` 里或 `server` 里,实现的效果请继续往下看 ``` set_real_ip_from 0.0.0.0/0; real_ip_header X-Forwarded-For; real_ip_recursive on; ``` ## 1. 放在 `http` 里,放到这里是全局的,一劳永逸 > 注意:我测试并没有什么异常,即使是加了 CDN 和没加 CDN,Nginx 日志都一样正确记录 IP(前提是你像我这样配置了) ![放在 `http` 里,放到这里是全局的,一劳永逸][1] ## 2. 放在 `server` 里,每个网站单独配置 ![放在 `server` 里,每个网站单独配置][2] # 效果 ![效果][3] [1]: https://cdn.nowtime.cc/2020/04/17/4089011037.png [2]: https://cdn.nowtime.cc/2020/04/17/2020278309.png [3]: https://cdn.nowtime.cc/2020/04/17/4204025706.png
搜题库(so.NowTool.cn), 大学生的好助手 支持超星、智慧树、学习强国 答案搜索 作者: Chuwen 时间: 2020-04-16 分类: PHP 评论 # 搜题库 #支持超星、智慧树、*学习强国 答案搜索 ## 网址:https://so.nowtool.cn/ > ### 主要面向的是大学生、学习强国用户,建议用使用空格分割关键字,查询内容尽量简短(虽然模糊查找准确率很高)。目前题库量在 `94855` 题,今天更新了学习强国 挑战题库 > *学习强国:题库仅包含挑战答题 欢迎反馈不能查找的题目,或提交题库,感谢你的使用! ![搜题库 so.NowTool.cn #支持超星、智慧树、*学习强国 答案搜索][1] ![蝶恋花 搜索结果 —— 搜题库 so.NowTool.cn][2] # 用到的技术 & 优缺点 - ThinkPHP 框架 - Bootstrap V3 - PHP - MySQL - 专门为搜索进行优化,基本保证模糊搜索准确率高、查找速度快(从九万多条数据中匹配,传统搜索需要耗费一两秒,现在优化后只需要几毫秒至十几毫秒) [1]: https://cdn.nowtime.cc/2020/04/16/2561811399.png [2]: https://cdn.nowtime.cc/2020/04/16/1325735822.png