您的位置:首页 > 其它

2015-09-13

2015-09-13 12:19 155 查看
1、FreeMarker 模版中的LIST标签 问题

从后台传来两个数组 names ids

要求在前端显示

<li name='${name}' id='${id}' >name</li>

我们知道list标签的用法是这样的

<#list names as name>
<li name='${name}'>${name}</li>

</#list>

这样就出现一个问题 怎样才能names与ids相对应呢 是不是可以在一个list放两个数组展示 比如这样:<#list names as name,ids as id>

但事实是不行 那么我就联想到JAVA中的For循环 里面是有索引给我们用的 要是可以得到当前元素的索引就好了 然后我就去查FreeMarker的API文档 发现里面确实是有索引的 不过它的索引比较特别

比如要获取当前待展示元素的索引 可以直接用name_index这样去进行获取,这样这个问题我们就可以通过索引进行解决了。解决方案如下:

<#list names as name>
<#list ids as id>
<#if name_index==id_index>  <#--保证name与id 配对出现-->
<li name='${name}' id='${id}' >name</li>
</#if>
</#list>

</#list>

2、MYSQL中to_days()函数的使用

最近在项目中碰到这样一个问题 那就是日志显示问题 一般来说日志每天都会产生至少上千条 如果一次全部显示出来的话

就会导致页面加载缓慢 这时我们就想到只查最近几天的纪录 这时我们就可以用到这个函数

比如数据表中的时间参数是update_time

那么最近两天的条件就是

to_days(now())-to_days(update_time)<2

3、MYSQL中的find_in_set()函数与group_concat()的使用

最后在项目中碰到这样一个问题,以用户表user为例:

userName                   userId

JosonLiu                   test1

Joson                      test2

应用场景:在其他表中存用户我们是存userId的 如果碰到存多个用户ID的情况 我们就是用","号进行分隔的作用,那么问题来了

在显示的时候 我们是不可能直接显示userId的 因为那个不友好 用户也看不懂 必须要显示用户名称。

比如如果存的用户ID串是这样的:test1,test2那么我们需要直接显示JosonLiu,Joson 

这样需要解决的问题有两个:

第一、如何进行userId的匹配 第二、如果用一个字段去接收用户名。

看到这种多个ID的匹配 我第一时间想起的是in()这个函数,但是in的问题是只能做INT型的匹配 而这里是字符串的匹配 那么我们就想有没有

这种针对字符串的匹配呢 结果一查 发现了find_in_set()这种函数 这个函数的原理我估计是类似JAVA中的数值映射。使用方法是这样的

find_in_set(property,property_compare)其中property代表要匹配的表的字段 property_compare则是匹配的值域。

说到SQL中的字符串连接 我第一个想到的就是CONCAT(str1,str2,…)这个函数 但是这种函数有一个致使的缺点 就是必须先清楚有多少个变量,而且如果

要在变量之中加分隔符也非常麻烦 必须自己手动去加。而我们这里查出来的纪录数是不确定的 所以明显不适合。这时我就想有没有根据纪录数

动态去链接的函数。这时我找到了group_concat()这个函数,它的用法也非常简单。group_concat(property) property为表中的一个字段,而且默认不同属性值之间会用","隔开。

这样的话 我们的需求就非常容易实现了 。

实现语句:select group_concat(userName) from user where find_in_set(userId,'test1,test2')
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: