day1
验证码错误前后端交互错误
今天在写修改密码时,前端传递给后端验证码时,第一次犯错,redis中空指针异常,检查后发现
redis中没有账号的键,调试发现,我将user的account的键写成了getYzm
写对之后,发现出现了验证码不正确的错误,但是我是将redis中的数据直接复制过来的,不可能不正确,调试后发现我用的模型user类去接yzm时用的integer类型的yzm属性接的,但是redis中的account键对应的值为String类型,属实记下了
Day2
Mysql
错误呈现
评论总共有7条但是我的sql只查出来3条检查发现sql语句有错误
表达的意思是,通过本页数的新闻id 查询该id下的
一级评论(内容,id) 和 一级评论下二级评论的(数量)
在where条件后添加二级评论的和一级评论的state都是合法的,
但是我忽略了group by这个,应将pr.state添加到on后面
此时,评论及其回复数量正确显示
错误原因:
聚合和非聚合列的概念:
在 SQL 中,GROUP BY
会将数据按指定的列进行分组。对于每个分组,你可以选择:
- 聚合列:使用聚合函数(如
COUNT
,SUM
,AVG
,MIN
,MAX
等)来计算分组内的值。 - 非聚合列:所有非聚合列必须包含在
GROUP BY
子句中,否则 SQL 引擎无法知道如何对这些列的值进行处理。
假设你将结果按照 p.id
进行分组,SQL 引擎会将 p.id
相同的所有行合并到一起,但它不知道如何处理那些没有包含在 GROUP BY
中的列(例如 p.news_id
, user.img
, user.nick_name
等),因为这些列的值可能会在组内有不同的值,SQL 无法判断应该显示哪个。
解决方案
将所有非聚合列加入到 GROUP BY
中:如果你不使用聚合函数处理这些列的值,那么你需要在 GROUP BY
中包含所有这些列。
使用聚合函数:对于那些不需要全部列出的列,可以使用适当的聚合函数。例如,如果你只想统计 pr.id
的数量,你可以仅对 pr.id
使用聚合函数 COUNT
,其他列仍然需要包含在 GROUP BY
中。
day3
sql查询count错误,我写的sql一级评论左连接二级评论,然后本来有14条评论,但是只查出10条评论
比如 凡是有回复的评论没有记到count中去
select * from pl p left join pl_reply pr on p.id = pr.pl_id where news_id = 25
错误原因,没有正确认识笛卡尔积的左连接,和count, 现在老实了 未来可欺.jpg
解决方法
day4 vue2局限性
在 Vue 2 中,Vue 的响应式系统有一个局限:它不能检测对象中动态新增的属性变化。换句话说,如果你在一个已经声明的对象中添加一个新的属性,Vue 无法自动追踪这个新属性的变化,因为这个属性在对象初始化时不存在。
为什么会这样?
Vue 通过 Object.defineProperty
实现对象的响应式数据绑定,但 Object.defineProperty
只能侦听已经存在的属性。如果你在对象已经被初始化之后添加一个新的属性,Vue 不会知道这个属性的变化,也不会自动更新与之绑定的视图。
day4
震惊,就说为啥报错原来写反了找了半天