“最难不过坚持”
本人承接扒站仿站,php网站维护,病毒查杀,网站编辑,网站改版,html制作
有需要网站维护,改版,病毒查杀,网站编辑,网站备案,html制作等相关的工作可以联系我。
本人有多年相关工作经验,也可提供免费咨询,交个朋友。
有需要探讨问题的朋友,也可以加我微信,共同探讨!
微信:15011482830 QQ:408917339
- https://jueru.net/
-
- :weixiao:
-
- :shuijiao: :weiqu: :zhenbang: :leng:
-
- :yiwen: :yiwen: :yiwen: :yiwen:
-
- 这个业务逻辑多少都有点奇怪了,阅读浏览次数增值在新闻详情页的控制器方法里setInc,这怎么还写进模型事件里了。如果非要用onAfterRead也可以,把新闻文章的内容单独分出来一个news_content表,然后把它和news做关联,然后给news_content表的onAfterRead事件做增值处理,这样点进新闻页内查询到文章内容时才会触发它。
-
sql语句left join需要用到右表的where条件
需求场景:
t_name表中存有全部数据
t_age表中的数据通过t_name表的主键关联t_name表中的部分数据
这样通过left join即可查询到a表的全部数据和其中关联b表中的信息。
select a.* from t_name a left join t_age b on b.id=a.id where a.id>0 order by a.id desc
但是有一个需求:t_age表中有个字段status,当status=1时,不用在关联查询结果中显示,怎么实现?
关联查询结果中就剩下t_name表中不关联的信息和已关联信息中status=0的信息了
尝试sql 1:
select a.* from t_name a left join t_age b on b.id=a.id and b.status=0 where a.id>0 order by a.id desc
由于对b表进行了限制,满足条件的只有一个,但是由于没有where条件,因此依然要以左表为准,又因为是一对一,所以输出还是左表的记录数。
所以不行。
尝试sql 2:
select a.* from t_name a left join t_age b on b.id=a.id where a.id>0 and b.status=0 order by a.id desc
将b.status=1写到where里,发现结果中只有这一行,打破了“left join”以左表为主的限制。
也不行。
可以使用的sql:
select a.* from t_name a left join t_age b on b.id=a.id where a.id>0 and (b.status is null or b.status=0) order by a.id desc
当b.status不存在或者为0的时候,获得查询结果
还有一种讨巧的方法:把字段status在数据库里面默认值设为null,这样就可以直接用b.status is null查询了,
select a.* from t_name a left join t_age b on b.id=a.id where a.id>0 and b.status is null order by a.id desc
但这样不具有通用行,数据库并不是随便改的
thinkphp中使用: