MySQL 子查询多个字段关联到结果集

正常情况下可以在 select 内嵌套子查询作为结果集的字段,示例如下:select id,name,(SELECT COUNT(id) FROM records WHERE user_id = users.id ) AS box_count FROM users where user_id = 9527;但如果需要子查询的多个字段返回,此时放在 select 是不行的:SELECT SUM(m

- 阅读全文 -

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

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

- 阅读全文 -

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(

- 阅读全文 -

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

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

- 阅读全文 -

sql 报错:Table is specified twice, both as a target for 'UPDATE' and as a separate source for data

如题,sql 报错:Table is specified twice, both as a target for 'UPDATE' and as a separate source for data。表被指定了两次,同时作为 update 对象和独立数据源。报错场景:查询两个表的差集并更新记录。举例说明:a、b 两表联查,找出 a 表中存在 b 表不存在的记录,然后更新 a 表的某个字段做标记。报

- 阅读全文 -

MySQL 中 find_in_set 函数使用方法

FIND_IN_SET(str,strlist) 是一个 MySQL 库函数(大小写都支持),可以直接在 WHERE 中使用,主要作用就是判断前一个字符串常量是否在后者字符串列表变量中。返回在字符串列表匹配到的索引,索引从 1 开始计数,匹配不到返回 0。在 sql 语句中,字段名是一个变量存在,而带入的参数就是常量。强调常量和变量是因为函数只接受这样的类型匹配,其他形式会报错或者查询不到结果。在

- 阅读全文 -

PHP 和 MySQL 计算某天是当年的第几周

PHP 直接使用 date() 即可:PHP: date - Manual// after php 4.1.0 $w = date('W'); // 当天 $w1 = date('W', strtotime('2020-07-28')); // 某天MySQL 某天WEEK(date_add('2020-07-28',interval 6 day),2);或者当天weekofyear(curdat

- 阅读全文 -

MySQL 日期时间存储类型 datetime、timestamp 以及 int 的联系和区别

大概印象这三个类型都可以用来存储日期时间,datetime 和 timestamp 展现形式如 '2020-07-27 14:25:30',int 则是整型存储秒数,形如 1595852730。个人通常会用 int 类型存储日期时间,一开始是觉得比较方便,因为 time() 获取当前的(与 1970-01-01 08:00:00 间隔的)秒数可以直接存入数据库。显示的时候秒数方便通过 date()

- 阅读全文 -

热门文章

最新文章

分类

其它