MySQL 查询结果由列转成行数据

行内字段拼接组合可以用到 CONCAT(),如果需要指定分隔符可以使用 CONCAT_WS(',', xx, xx..),但如何将多行数据提取到单行结果中呢?明确需求是,递归查询所属下级的id,最终用表中的 id 拼接成字串。这当然可以放在 php 代码里使用 implode 函数去实现,但这次需要通过 sql 做一个临时的查询。因为所属下级最大层级为 3 级,所以可以通过 sql 的 union

Laravel 项目优先使用到的第三方库

Intervention Image - 图片处理与操作库为什么不用 PHP 自带的 GD 图片处理扩展库?GD 库本身提供了大部分图片处理的函数,但使用前都会将其封装一个类,来处理业务方面的需求。网上有很多这样的 GD 库封装案例,但在切换框架之后,对于使用自定义的库引入和使用适应方面需要花费时间,且这样封装本身也缺少维护,容易造成代码不兼容的问题。Intervention Image 是在 G

centos 服务器升级 PHP 版本到 8,以及升级过程中 php-fpm、nginx 出现的问题

准备搭建一个 Laravel8 项目环境,对应 PHP 8。服务器环境上 PHP 7.3.3,最理想的情况是像宝塔 panel 一样,可以自由切换 PHP 版本,甚至可以对某个项目使用指定版本的 php。这个想法在耗费了几个小时的尝试后被放弃了,而此时,环境里 PHP 的展现形式为 php80。因为与当前环境的兼容性问题,导致 php80-php-zip 安装不了,执行 php80 -v 一直有警

mysql 解决多表关联数据记录重复问题

问题说明遇到的情况类似于包含某商品的店铺订单总金额,订单明细表 -> 订单表关系为 n:1。如果明确商品 ID,可以将明细表与订单表关系约束为 1:1,这样计算的订单总金额就不会存在重复统计。但当前需要统计多个商品,这样如果直接通过多表联查并聚合统计店铺订单总金额就会存在重复统计的问题。当然可以直接绕过商品明细表,直接计算商铺订单总金额,但这样无法对商品进行约束。解决网络上有针对单表查询重复

mysql SUM 函数使用问题和精度计算

先看一下函数语法:SUM(DISTINCT expression)如果在没有返回匹配行 SELECT 语句中使用 SUM 函数,则 SUM 函数返回 NULL,而不是0。DISTINCT 运算符允许计算集合中的不同值。SUM 函数忽略计算中的 NULL 值。在没有匹配行 SUM 会返回 NULL 而不是 0,这是我之前没有注意到的点。为了让结果不会 NULL 而是 0,可以使用 COALESCE(

Laravel 中 bcrypt 助手方法解析

因为发现密码重新生成(密码值不变)时,返回的 hash 值都会变化,而解密却都能够成功,所以对 Laravel 自带的这个获取加密 hash 值的方法突然比较好奇。\vendor\laravel\framework\src\Illuminate\Foundation\helpers.phpif (! function_exists('bcrypt')) { /** * Hash

PHP 处理 16 进制数据以及TCP 报文发送工具 sokit 使用

公司的充电宝项目使用物联网技术连接设备,而与设备交互需要用到 TCP (或者 MQTT,性质一样)长连接。PHP 做这种项目大概率都会使用 workerman 框架(可以处理 TCP、Websockt 等请求),而业务框架 thinkphp 似乎也是首选。因为 thinkphp 可以将 wokerman 以扩展库的形式直接安装到框架中使用,过程非常简便。thinkphp 会在 config 下生成

PHP 循环执行异步操作(数据库操作)时,发现执行了两次问题解决

在做一个数据维护工作的 php 脚本时,从插入数据库的记录中发现,数据记录被插入了两次。通过加入 Log 日志标记发现,问题源头在 foreach 循环执行上数据库操作上。查看循环对象,并没有重复记录,所以是 foreach 方法体本身执行了两次,这是我不能理解的。猜测与循环执行的数据库异步操作有关。以下为循环异步操作的代码示例: $orders = Orders::where('m

mysql 求日期差值,计算上线天数或注册天数

本来计算上线天数或注册天数是可以放到查询返回结果中处理的,但业务逻辑需要筛选上线天数达到7天、30天的记录,也就是说日期差值需要用在 where 子句中。这时需要 mysql 的库函数来帮忙处理了。涉及到处理时间差值的 mysql 库函数有这几个:TIMEDIFF()、DATEDIFF()、TIMESTAMPDIFF()。1. 使用 TIMEDIFF() 函数,求 time 差值timediff(