m_Orchestrate learning system---三十二、数据库字段判断为空时容易出现问题,如何从根本上解决这个问题
一、总结
一句话总结:字段禁止为空,设置默认值0即可
禁止 空 默认值
1、thinkphp查询数据库时判断字段是否为null?
字段 null
字段 值 = null
[NOT] NULL :
查询字段是否(不)是Null
,例如:
where('name', null);
where('title','null');
where('name','not null');
如果你需要查询一个字段的值为字符串null
或者not null
,应该使用:
where('title','=', 'null');
where('name','=', 'not null');
2、数据库字段判断为空时容易出现问题,如何从根本上解决这个问题?
禁止 空 默认值
字段禁止为空,设置默认值0即可
3、学生分组分为所有(全部),未分组,对应分组,具体如何实现?
所有 -1
未分组 0
全部设置为-1,未分组的设置为0,php去数据的时候为-1则不加对应的条件判断
因为在之前的操作中很喜欢将所有设置为0而不是这里的-1
html
1 <select class="form-control btn-sm" name="u_ugid" id="u_ugid" onchange="javascript:location.href=this.value;"> 2 <option value="{:url('institution.group/grouping',array('gid'=>-1))}" selected >All</option> 3 <option value="{:url('institution.group/grouping',array('gid'=>0))}" {if condition="$gid eq 0"}selected{/if} >No Grouped</option> 4 {volist name="groups" id="vo"} 5 <option value="{:url('institution.group/grouping',array('gid'=>$vo.gid))}" {if condition="$vo.gid eq $gid"}selected{/if} >{$vo.gname}</option> 6 {/volist} 7 </select>
php
1 public function grouping(){ 2 //將小組信息傳遞到頁面 3 $groups=db('group')->select(); 4 $this->assign('groups',$groups); 5 6 $gid=input('gid'); 7 if(is_null($gid)) $gid=-1; 8 $this->assign('gid',$gid); 9 //dump($gid);die; 10 11 //將學生用戶傳遞到頁面 12 $map=null; 13 $map['u_status']=0; 14 if($gid!=-1) $map['u_ugid']=$gid; 15 $users=db('user')->alias('u')-> 16 join('group g','u.u_ugid=g.gid','LEFT')->where($map)->paginate(10); 17 //dump($users);die; 18 $this->assign('users',$users); 19 return view(); 20 }
4、bootstrap栅格系统?
col-md
1 <div class="row"> 2 <div class="col-md-2"> 3 <h3 class="box-title text-info" style="padding-top:8px;margin-bottom: 10px; ">資源列表</h3> 4 </div> 5 <div class="col-md-10"> 6 <select class="btn-sm" onchange="javascript:location.href=this.value;" style="margin-bottom: 10px;"> 7 <option {if condition="$a_jieduan_id lt 1"} selected="" {/if} value="{:url('article/index',array('a_jieduan_id'=>0))}">All</option> 8 <option {if condition="$a_jieduan_id eq 1"} selected="" {/if} value="{:url('article/index',array('a_jieduan_id'=>1))}">WeEngage</option> 9 <option {if condition="$a_jieduan_id eq 2"} selected="" {/if} value="{:url('article/index',array('a_jieduan_id'=>2))}">WeExplore</option> 10 <option {if condition="$a_jieduan_id eq 3"} selected="" {/if} value="{:url('article/index',array('a_jieduan_id'=>3))}">WeAnalyze</option> 11 <option {if condition="$a_jieduan_id eq 4"} selected="" {/if} value="{:url('article/index',array('a_jieduan_id'=>4))}">WeExplain</option> 12 <option {if condition="$a_jieduan_id eq 5"} selected="" {/if} value="{:url('article/index',array('a_jieduan_id'=>5))}">WeReflect</option> 13 </select> 14 <select class="btn-sm" onchange="javascript:location.href=this.value;" style="margin-bottom: 10px;"> 15 <option value="">學校學下學校</option> 16 <option value="">學校</option> 17 <option value="">學校</option> 18 </select> 19 <select class="btn-sm" onchange="javascript:location.href=this.value;" style="margin-bottom: 10px;"> 20 <option value="">班級一</option> 21 <option value="">班級</option> 22 <option value="">班級</option> 23 </select> 24 <select class=" btn-sm" onchange="javascript:location.href=this.value;" style="margin-bottom: 10px;"> 25 <option value="">小組一</option> 26 <option value="">小組</option> 27 <option value="">小組</option> 28 </select> 29 <select class="btn-sm" onchange="javascript:location.href=this.value;" style="margin-right: 10px;margin-bottom: 10px;"> 30 <option value="">老師</option> 31 <option value="">學生</option> 32 </select> 33 <a href="" class="btn btn-sm btn-danger">確定</a> 34 </div> 35 </div>
5、html布局的时候如何让前后两个产生间距,但是分成两行的时候还是从头起(就是不能是margin-left)?
margin-right
不能是margin-left,如果是margin-left,另起一行的时候就会和左边有间距
所以可以是前一个的margin-right
6、在老師-管理員端文章頁面文章页面显示时,实现管理员登录看到全部文章,老师登录只能看到本班的文章,本班的文章包括老师文章和学生文章,就是需要实现找出班级号是**或者小组号是**的文章?
评论 回复 where function use
多应该多看手册下面的评论和回复的,里面有
SELECT * FROM test
WHERE cert_type
= 2 AND ( cert_terminology
LIKE 0 OR cert_licencing
LIKE 0 OR member_id
IN (1,2,3) )
请问这个查询如何写出来
Db::name('test') ->where('cert_type',2) ->where(function ($query){ $query->where('cert_terminology','like',0) ->whereOr('cert_licencing','like',0) ->whereOr('member_id','in',[1,2,3]); }) ->select();
当有变量参数的时候
Db::name('test') ->where(function ($query) use ($user_id1, $user_id2){ $query->where([ 'user_id1'=> $user_id1, 'user_id2'=> $user_id2 ]); }) ->whereOr(function ($query) use ($user_id1, $user_id2){ $query->where([ 'user_id1'=>$user_id2, 'user_id2'=>$user_id1 ]); }) ->select();
最后代码
$articles=db('article')->alias('a')-> join('user u','u.u_id=a.a_authorid')-> join('group g','u.u_ugid=g.gid','LEFT')-> join('school_class sc','u.u_class=sc.sc_id','LEFT')->where($map1)-> where(function ($query) use($user,$teacher_gids){ $query->where('sc_id','=',$user['u_class'])->whereOr('gid','in',$teacher_gids); })-> paginate(15);
可以朝这个方向,thinkphp的in转sql的in还没解决
$teacher_gids=appadmin2model esource1Article::getGroups_id($user['u_class']); $teacher_gids='('.implode(',',$teacher_gids).')'; $articles=db('article')->alias('a')-> join('user u','u.u_id=a.a_authorid')-> join('group g','u.u_ugid=g.gid','LEFT')-> join('school_class sc','u.u_class=sc.sc_id','LEFT')->where($map1)-> where('sc_id = :sc_id OR gid = :teacher_gids',['sc_id'=>$user['u_class'],'teacher_gids'=>17])-> paginate(15); //$map1['gid']=['in',$teacher_gid];
配合
where('sc_id = :sc_id OR gid in :teacher_gids',['sc_id'=>$user['u_class'],'teacher_gids'=>$teacher_gids])
生成:
SELECT COUNT(*) AS tp_count FROM `mo_article` `a` INNER JOIN `mo_user` `u` ON `u`.`u_id`=`a`.`a_authorid` LEFT JOIN `mo_group` `g` ON `u`.`u_ugid`=`g`.`gid` LEFT JOIN `mo_school_class` `sc` ON `u`.`u_class`=`sc`.`sc_id` WHERE `u_status` = '0' AND ( sc_id = '13' OR gid in '(16,17,18)' ) LIMIT 1
正确的sqlin语句如下: 用法:select * from where field in (value1,value2,value3,…)
区别就是括号上面没有引号
7、thinkphp中的whereor是什么意思?
整体 or
是整体的or,不是局部的or,就是判断条件上
join('school_class sc','u.u_class=sc.sc_id','LEFT')->where($map1)-> where('sc_id','=',$user['u_class'])->whereor('gid','in',$teacher_gids)->
不管其它两个where是什么内容,whereor都会执行
8、ueditor动态改变宽度?
百度 文档 引擎
ueditor 网页 产物 调
百度上啥都有,傻傻找API和文档找不到的时候一定记得去搜索引擎上面找一找
ueditor是网页的产物,没有API我们照样可以像调网络元素那样调,一样的
1 <!-- ueditor --> 2 <script type="text/javascript"> 3 var $=jQuery; 4 var ueditor_width=$('.myEditor').width(); 5 //$('.myEditor').css({'border':'5px ridge #ff00ff'}); 6 //alert(width); 7 UE.getEditor('{$ueditorID}',{ 8 initialFrameWidth:ueditor_width, 9 initialFrameHeight:200, 10 }); 11 12 //ueditor自動調節高度函數 13 function ueditor_setWidth(){ 14 var ueditor_width=$('.myEditor').width(); 15 $('.myEditor #edui1').css('width',ueditor_width); 16 } 17 18 //頁面尺寸改變編輯器的大小自動改變 19 $(window).resize(function(){ 20 ueditor_setWidth(); 21 }); 22 </script>
9、响应式表格?
table-responsive
不是在table上面加,是在table外的div上面加
10、tp5出现Illegal string offset 'eq_e_id'?
百度 数组名 相同
问题解决不了,百度
是由于数组名取相同
在volist-vo循环里面又多了一个volist-vo循环,vo被重新复制,所以影响了后面的vo,所以会出现Illegal string offset 'eq_e_id'
1 {if condition="strlen($vo['eq_stem_picture'])>0"} 2 <div class="form-group"> 3 <label for="eq_stem_picture"> 4 題目題幹圖片(可選多張) 5 <small class="text-danger">最多20張,大小總和不超過500M</small> 6 </label> 7 8 <div class="fry_file"> 9 <button type="button" class="btn btn-danger btn-sm" disabled> 10 <i class="fa fa-upload"></i> Select images to upload</button> 11 <input class="fry_file_input" id="eq_stem_picture" type="file" accept="image/*" name="eq_stem_picture[]" multiple disabled> 12 </div> 13 <div id="file-list"> 14 <?php 15 $eq_stem_pictures = explode(",,",$vo['eq_stem_picture']); 16 ?> 17 {volist name="eq_stem_pictures" id="vo4"} 18 <?php if(strlen($vo)<=0) continue;?> 19 <img src="{$vo4}" alt="" style="max- 45%;" class="img-thumbnail"> 20 {/volist} 21 </div> 22 </div> 23 {/if} 24 25 26 <div class="form-group"> 27 <label for="eq_e_id">題目所屬的試卷</label> 28 <div> 29 <select data-am-selected="{btnSize: 'sm'}" class="fry_select" name="eq_e_id" disabled> 30 <option {if condition="$vo.eq_e_id eq 0"} selected {/if} value="0">不屬於試卷</option> 31 {volist name="exams" id="vo3"} 32 <option {if condition="$vo['eq_e_id'] eq $vo3.e_id"} selected {/if} value="{$vo3.e_id}">{$vo3.e_title}-{$vo3.e_subtitle}</option> 33 {/volist} 34 </select> 35 </div> 36 </div>
id="vo4"里面的vo4本来是vo所以会报错