TP5、mysql相关操作整理

一、在mysql更新语句中使用乘法:

TP5、mysql相关操作整理_第1张图片


->update([

'status' => Db::raw('`status`*(-1)'),   
//status值为1和-1,代表相反的状态,建议判断当前状态,避免两人同时操作时状态无改变

]);

 

二、判断字符是否在另一个字符串中出现:


$groups['rules']='1,3,5,7,9';

//有漏洞,比如权限值为2,权限组中有21会判断有2的权限:
->field('instr(\''.$groups['rules'].'\',number) as ischecked')

//应改成FIND_IN_SET();
->field('FIND_IN_SET(number,\''.$groups['rules'].'\') as ischecked')

参考链接:mysql中find_in_set()函数的使用--https://www.cnblogs.com/xiaoxi/p/5889486.html。

 

三、mysql中if函数用法及时间戳转换日期格式:


->field('if(p.status=0,"否","是") as status,from_unixtime(p.create_time) as time');

->field(',CASE WHEN sid in (1,2) THEN \'优秀\' WHEN sid in (3,4) THEN \'一般\' ELSE \'较差\' END status');  //在此语句中,status相当于as 出来一个新字段,原数据表没有

参考链接:MySQL函数大全及用法示例  https://www.cnblogs.com/xuyulin/p/5468102.html

 

四、mysql的查询中怎么截取字符串:

  1. 从左开始截取字符串left(str, length);

  2. 从右开始截取字符串right(str, length);

  3. 截取字符串substring(str, pos, length),说明:substring(被截取字段,从第几位开始截取,截取长度);

  4. 按关键字截取字符串substring_index(str,delim,count),说明:substring_index(被截取字段,关键字,关键字出现的次数)。


->join('city c','substring_index(substring_index(area,\',\',2),\',\',-1)=c.c_id')

参考链接:https://zhidao.baidu.com/question/1757749164112887508.html

 

五、mysql批量修改表前缀:

1、先登入你的Navicat for mysql中,新建查询,在查询编辑器内执行命令:
 


Select CONCAT('ALTER TABLE ', table_name, ' RENAME TO ', table_name,';' )

FROM information_schema.tables

Where table_name LIKE 'wp_%';

得到多条结果,如:


ALTER TABLE table_name RENAME TO table_name;

2、复制上面的结果到记事本,将TO table_批量替换成TO new_

3、再复制记事本的内容,粘帖到查询编辑器内,执行命令即可。

 

参考链接:https://blog.csdn.net/forest_fire/article/details/50944231

 

六、navicat复制一个表里所有的字段的快捷命令

1、先登入你的Navicat for mysql中,新建查询,在查询编辑器内执行命令:


select group_concat(COLUMN_NAME) from information_schema.COLUMNS where table_name = '表名';

亲测有效,不过似乎是双份的,如果是工资就好了。

参考链接:https://blog.csdn.net/superit401/article/details/69938983

 

七、MYSQL中批量替换某个字段的部分数据

1、示例,清除(替换为空)掉数据表中混杂的换行符回车符:


UPDATE .`test` SET `code` = REPLACE(`code`,'\r\n','') WHERE `code` LIKE '%\r\n%';

参考链接:https://blog.csdn.net/qq_14997169/article/details/53241395

亲测有效。

八、GROUP BY分组,通过GROUP_CONCAT、IF函数,从分组中获取想要的结果 :

SELECT
    T.*, if(GROUP_CONCAT(IF(T.s_code='S2495',1,null)),1,0) as LAY_CHECKED
FROM
    `group_test` `T`
WHERE
    `T`.`b_code` = 'B0100' && `T`.`i_code` = 'I2833'
GROUP BY
    T.b_code,
    T.i_code
LIMIT 0,
 1000;

如此文章对你有帮助,请打开支付宝搜索535149388,领取马云的红包,使用余额宝消费可抵扣,大家好,才是真的好。

 

你可能感兴趣的:(TP5、mysql相关操作整理)