vim下一页
整页翻页 ctrl-f ctrl-b
f就是forword b就是backward
翻半页
ctrl-d ctlr-u
d=down u=up
滚一行
ctrl-e ctrl-y
zz 让光标所在的行居屏幕中央
zt 让光标所在的行居屏幕最上一行 t=top
zb 让光标所在的行居屏幕最下一行 b=bottom
以上是为你整理的vim命令下一页
整页翻页 ctrl-f ctrl-b
f就是forword b就是backward
翻半页
ctrl-d ctlr-u
d=down u=up
滚一行
ctrl-e ctrl-y
zz 让光标所在的行居屏幕中央
zt 让光标所在的行居屏幕最上一行 t=top
zb 让光标所在的行居屏幕最下一行 b=bottom
以上是为你整理的vim命令下一页
MySQL从5.7版本开始就支持JSON格式的数据,操作用起来挺方便的。
建表
在新建表时字段类型可以直接设置为json类型,比如我们创建一张表:
CREATE TABLE test_user
(id
INT PRIMARY KEY AUTO_INCREMENT,name
VARCHAR ( 50 ) NOT NULL,info
JSON
);
json类型字段可以为NULL
插入数据
INSERT INTO test_user(name
, info
) VALUES('xiaoming','{"sex": 1, "age": 18, "nick_name": "小萌"}');
json类型的字段必须时一个有效的json字符串
可以使用JSON_OBJECT()函数构造json对象:
INSERT INTO test_user(name
, info
) VALUES('xiaohua', JSON_OBJECT("sex", 0, "age", 17));
使用JSON_ARRAY()函数构造json数组
INSERT INTO test_user(name
, info
) VALUES('xiaozhang', JSON_OBJECT("sex", 1, "age", 19, "tag", JSON_ARRAY(3,5,90)));
查询test_user所有的数据
select * from test_user;
查询
表达式: 对象为json列->'$.键', 数组为json列->'$.键[index]'
select name, info->'$.nick_name', info->'$.sex', info->'$.tag[0]' from test_user;
等价于:对象为JSON_EXTRACT(json列 , '$.键') ,数组为JSON_EXTRACT(json列 , '$.键[index]')
select name, JSON_EXTRACT(info, '$.nick_name'), JSON_EXTRACT(info, '$.sex'), JSON_EXTRACT(info, '$.tag[0]') from test_user;
不过看到上面"小萌"是带双引号的,这不是我们想要的,可以用JSON_UNQUOTE函数将双引号去掉
select name, JSON_UNQUOTE(info->'$.nick_name') from test_user where name='xiaoming';
也可以直接使用操作符->>
select name, info->>'$.nick_name' from test_user where name='xiaoming';
当然属性也可以作为查询条件
select name, info->>'$.nick_name' from test_user where info->'$.nick_name'='小萌';
SELECT LoanNo FROM wbhj_loan
lo WHERE lo.contractInfo ->> '$.contractNo'= '11' AND lo.loanResult=1
值得一提的是,可以通过虚拟列对JSON类型的指定属性进行快速查询。
创建虚拟列:
ALTER TABLE test_user
ADD nick_name
VARCHAR(50) GENERATED ALWAYS AS (info->>'$.nick_name') VIRTUAL;
注意用操作符->>
使用时和普通类型的列查询是一样:
select name,nick_name from test_user where nick_name='小萌';
更新
使用JSON_INSERT()插入新值,但不会覆盖已经存在的值
UPDATE test_user SET info = JSON_INSERT(info, '$.sex', 1, '$.nick_name', '小花') where id=2;
使用JSON_SET()插入新值,并覆盖已经存在的值
UPDATE test_user SET info = JSON_INSERT(info, '$.sex', 0, '$.nick_name', '小张') where id=3;
使用JSON_REPLACE()只替换存在的值
UPDATE test_user SET info = JSON_REPLACE(info, '$.sex', 1, '$.tag', '[1,2,3]') where id=2;
可以看到tag没有更新进去
SELECT
json_extract(a.summaryDesc
,('$[0].sellerInfoSection[1].houseNo'))
FROMchannel_summary
a
压缩:
tar -zcvf 压缩后文件名.tar.gz 被压缩文件
解压:
tar -zxvf 被解压文件
注意:不要有多余的空格,一个空格即可。
具体的可以在linux环境下 用 tar --help 查看详细说明
格式:tar [option] file
-c create create a new archive
-x extract extract files from an archive
-t list list the contents of an archive
其中c/x/t不能同时存在
-z --gzip, --gunzip, --ungzip filter the archive through gzip
-j, --bzip2 filter the archive through bzip2
-f, --file=ARCHIVE use archive file or device ARCHIVE
-v, --verbose verbosely list files processed
-p :使用原文件的原来属性(属性不会依据使用者而变)
-P :可以使用绝对路径来压缩!
-N :比后面接的日期(yyyy/mm/dd)还要新的才会被打包进新建的文件中!
--exclude FILE:在压缩的过程中,不要将 FILE 打包!
范例:
tar -cvf /tmp/etc.tar *.jpg 将所有jpg文件打包
范例一:将整个 /etc 目录下的文件全部打包成为 /tmp/etc.tar
[root@linux ~]# tar -cvf /tmp/etc.tar /etc <==仅打包,不压缩!
[root@linux ~]# tar -zcvf /tmp/etc.tar.gz /etc <==打包后,以 gzip 压缩
[root@linux ~]# tar -jcvf /tmp/etc.tar.bz2 /etc <==打包后,以 bzip2 压缩
范例二:查阅上述 /tmp/etc.tar.gz 文件内有哪些文件?
[root@linux ~]# tar -ztvf /tmp/etc.tar.gz
范例三:将 /tmp/etc.tar.gz 文件解压缩在 /usr/local/src 底下
[root@linux ~]# cd /usr/local/src
[root@linux src]# tar -zxvf /tmp/etc.tar.gz
范例四:在 /tmp 底下,只想要将 /tmp/etc.tar.gz 内的 etc/passwd 解开而已
[root@linux ~]# cd /tmp
[root@linux tmp]# tar -zxvf /tmp/etc.tar.gz etc/passwd
范例五:将 /etc/ 内的所有文件备份下来,并且保存其权限!
[root@linux ~]# tar -zxvpf /tmp/etc.tar.gz /etc
范例六:在 /home 当中,比 2005/06/01 新的文件才备份
[root@linux ~]# tar -N "2005/06/01" -zcvf home.tar.gz /home
范例七:要备份 /home, /etc ,但不要 /home/dmtsai
[root@linux ~]# tar --exclude /home/dmtsai -zcvf myfile.tar.gz /home/* /etc
范例八:将 /etc/ 打包后直接解开在 /tmp 底下,而不产生文件!
[root@linux ~]# cd /tmp
[root@linux tmp]# tar -cvf - /etc | tar -xvf -
tar -zcvf xxxx.tar.gz --exclude=./info --exclude=./tag --exclude=./special ./*
class ascii {
/**
* 将ascii码转为字符串
* @param type $str 要解码的字符串
* @param type $prefix 前缀,默认:&#
* @return type
*/
function decode($str, $prefix="&#") {
$str = str_replace($prefix, "", $str);
$a = explode(";", $str);
foreach ($a as $dec) {
if ($dec < 128) {
$utf .= chr($dec);
} else if ($dec < 2048) {
$utf .= chr(192 + (($dec - ($dec % 64)) / 64));
$utf .= chr(128 + ($dec % 64));
} else {
$utf .= chr(224 + (($dec - ($dec % 4096)) / 4096));
$utf .= chr(128 + ((($dec % 4096) - ($dec % 64)) / 64));
$utf .= chr(128 + ($dec % 64));
}
}
return $utf;
}
/**
* 将字符串转换为ascii码
* @param type $c 要编码的字符串
* @param type $prefix 前缀,默认:&#
* @return string
*/
function encode($c, $prefix="&#") {
$len = strlen($c);
$a = 0;
while ($a < $len) {
$ud = 0;
if (ord($c{$a}) >= 0 && ord($c{$a}) <= 127) {
$ud = ord($c{$a});
$a += 1;
} else if (ord($c{$a}) >= 192 && ord($c{$a}) <= 223) {
$ud = (ord($c{$a}) - 192) * 64 + (ord($c{$a + 1}) - 128);
$a += 2;
} else if (ord($c{$a}) >= 224 && ord($c{$a}) <= 239) {
$ud = (ord($c{$a}) - 224) * 4096 + (ord($c{$a + 1}) - 128) * 64 + (ord($c{$a + 2}) - 128);
$a += 3;
} else if (ord($c{$a}) >= 240 && ord($c{$a}) <= 247) {
$ud = (ord($c{$a}) - 240) * 262144 + (ord($c{$a + 1}) - 128) * 4096 + (ord($c{$a + 2}) - 128) * 64 + (ord($c{$a + 3}) - 128);
$a += 4;
} else if (ord($c{$a}) >= 248 && ord($c{$a}) <= 251) {
$ud = (ord($c{$a}) - 248) * 16777216 + (ord($c{$a + 1}) - 128) * 262144 + (ord($c{$a + 2}) - 128) * 4096 + (ord($c{$a + 3}) - 128) * 64 + (ord($c{$a + 4}) - 128);
$a += 5;
} else if (ord($c{$a}) >= 252 && ord($c{$a}) <= 253) {
$ud = (ord($c{$a}) - 252) * 1073741824 + (ord($c{$a + 1}) - 128) * 16777216 + (ord($c{$a + 2}) - 128) * 262144 + (ord($c{$a + 3}) - 128) * 4096 + (ord($c{$a + 4}) - 128) * 64 + (ord($c{$a + 5}) - 128);
$a += 6;
} else if (ord($c{$a}) >= 254 && ord($c{$a}) <= 255) { //error
$ud = false;
}
$scill .= $prefix.$ud.";";
}
return $scill;
}
}
$aa = new ascii;
echo "<xmp>";
echo $str = $aa->encode("我的博客");
echo "</xmp>";
echo $aa->decode($str);
帝国CMS是常用的开源建站系统之一,其提供的专题功能可以帮助站长更好的分类文章,做好站内优化。那么如何在网站内容页面调用文章所属专题名称和链接呢?
使用帝国提供的loop标签结构数据库查询命令可以实现这种调用要求。代码如下:
[e:loop={"select ztid from {$dbtbpre}enewsztinfo where classid='$navinfor[classid]' and id='$navinfor[id]'",10,24,0}]
<a href="[!--news.url--]<?=$class_zr[$bqr[ztid]][ztpath]?>" target="_blank"><?=$class_zr[$bqr[ztid]][ztname]?></a>
[/e:loop]
其中,<?=$class_zr[$bqr[ztid]][ztpath]?>调用的专题链接,<?=$class_zr[$bqr[ztid]][ztname]?>调用的是专题名称。
如果大家想要在内容页调用文章当前栏目所包含的专题名称和链接,可以使用如下的代码:
[e:loop={"select * from {$dbtbpre}enewszt where classid=$GLOBALS[navclassid]",10,24,0}]
<a href="/<?=$bqr[ztpath]?>" target="_blank"><?=$bqr[ztname]?></a>
[/e:loop]
在内容页调用专题名称和链接,可以增加到专题页面的路径,增加专题的爬取概率,大概可以根据自身需求进行调用。