三十而立

2017年12月

mysql时间戳转换

//转换并写入:把时间戳转为可阅读时间(年-月-日 时:分:秒)格式
//wp_post是表名,addtime是时间字段
UPDATE wp_post set addtime=FROM_UNIXTIME(addtime,'%Y-%m-%d %H:%i:%s');

//wp_post是表名,addtime是时间字段
//查询转换入:把时间戳转为可阅读时间(年-月-日 时:分:秒)格式
select FROM_UNIXTIME(addtime,'%Y年%m月%d') from wp_post;

mysql时间加减,通常用于时区转换

//给时间加1小时语法,wp_post是表名,addtime是时间
UPDATE wp_post set addtime=DATE_ADD(addtime,interval 1 hour);
//减去1小时
UPDATE wp_post set addtime=DATE_sub(addtime,interval 1 hour);

select date_add(@dt, interval 1 day);   - 加1天  
select date_add(@dt, interval 1 hour);   -加1小时  
select date_add(@dt, interval 1 minute);    - 加1分钟  
select date_add(@dt, interval 1 second); -加1秒  
select date_add(@dt, interval 1 microsecond);-加1毫秒  
select date_add(@dt, interval 1 week);-加1周  
select date_add(@dt, interval 1 month);-加1月  
select date_add(@dt, interval 1 quarter);-加1季  
select date_add(@dt, interval 1 year);-加1年  

WordPress使用MySQL数据库。作为一个开发者,我们有必要掌握WordPress数据库的基本构造,并在自己的插件或主题中使用他们。

截至WordPress3.0,WordPress一共有以下11个表。这里加上了默认的表前缀 wp_ 。

wp_commentmeta:存储评论的元数据
wp_comments:存储评论
wp_links:存储友情链接(Blogroll)
wp_options:存储WordPress系统选项和插件、主题配置
wp_postmeta:存储文章(包括页面、上传文件、修订)的元数据
wp_posts:存储文章(包括页面、上传文件、修订)
wp_terms:存储每个目录、标签
wp_term_relationships:存储每个文章、链接和对应分类的关系
wp_term_taxonomy:存储每个目录、标签所对应的分类
wp_usermeta:存储用户的元数据
wp_users:存储用户

在WordPress的数据库结构中,存储系统选项和插件配置的wp_options表是比较独立的结构,在后文中会提到,它采用了key-value模式存储,这样做的好处是易于拓展,各个插件都可以轻松地在这里存储自己的配置。

post,comment,user 则是三个基本表加上拓展表的组合。以wp_users为例,wp_users已经存储了每个用户会用到的基本信息,比如 login_name、display_name、 password、email等常用信息,但如果我们还要存储一些不常用的数据,最好的做法不是去在表后加上一列,去破坏默认的表结构,而是将数据存在wp_usermeta中。wp_usermeta这个拓展表和wp_options表有类似的结构,我们可以在这里存储每个用户的QQ号码、手机号码、登录WordPress后台的主题选项等等。

比较难以理解的是term,即wp_terms、wp_term_relationships、wp_term_taxonomy。在WordPress的系统里,我们常见的分类有文章的分类、链接的分类,实际上还有TAG,它也是一种特殊的分类方式,我们甚至还可以创建自己的分类方法。WordPress将所有的分类及分类方法、对应结构都记录在这三个表中。wp_terms记录了每个分类的名字以及基本信息,如本站分为“WordPress开发”、“WPCEO插件”等,这里的分类指广义上的分类,所以每个TAG也是一个“分类”。wp_term_taxonomy记录了每个分类所归属的分类方法,如“WordPress开发”、“WPCEO插件”是文章分类(category),放置友情链接的“我的朋友”、“我的同事”分类属于友情链接分类(link_category)。wp_term_relationships记录了每个文章(或链接)所对应的分类方法。

庆幸的是,关于term的使用,WordPress中相关函数的使用方法还是比较清晰明了,我们就没必要纠结于它的构造了。

在上文中我们已经介绍了WordPress数据库中各个表的作用,本文将继续介绍每个表中每个列的作用。WordPress官方文档已经有比较详细的表格,本文仅对常用数据进行介绍。

wp_commentmeta
meta_id:自增唯一ID
comment_id:对应评论ID
meta_key:键名
meta_value:键值

wp_comments
comment_ID:自增唯一ID
comment_post_ID:对应文章ID
comment_author:评论者
comment_author_email:评论者邮箱
comment_author_url:评论者网址
comment_author_IP:评论者IP
comment_date:评论时间
comment_date_gmt:评论时间(GMT+0时间)
comment_content:评论正文
comment_karma:未知
comment_approved:评论是否被批准
comment_agent:评论者的USER AGENT
comment_type:评论类型(pingback/普通)
comment_parent:父评论ID
user_id:评论者用户ID(不一定存在)

wp_links
link_id:自增唯一ID
link_url:链接URL
link_name:链接标题
link_image:链接图片
link_target:链接打开方式
link_description:链接描述
link_visible:是否可见(Y/N)
link_owner:添加者用户ID
link_rating:评分等级
link_updated:未知
link_rel:XFN关系
link_notes:XFN注释
link_rss:链接RSS地址

wp_options
option_id:自增唯一ID
blog_id:博客ID,用于多用户博客,默认0
option_name:键名
option_value:键值
autoload:在WordPress载入时自动载入(yes/no)

wp_postmeta
meta_id:自增唯一ID
post_id:对应文章ID
meta_key:键名
meta_value:键值

wp_posts
ID:自增唯一ID
post_author:对应作者ID
post_date:发布时间
post_date_gmt:发布时间(GMT+0时间)
post_content:正文
post_title:标题
post_excerpt:摘录
post_status:文章状态(publish/auto-draft/inherit等)
comment_status:评论状态(open/closed)
ping_status:PING状态(open/closed)
post_password:文章密码
post_name:文章缩略名
to_ping:未知
pinged:已经PING过的链接
post_modified:修改时间
post_modified_gmt:修改时间(GMT+0时间)
post_content_filtered:未知
post_parent:父文章,主要用于PAGE
guid:未知
menu_order:排序ID
post_type:文章类型(post/page等)
post_mime_type:MIME类型
comment_count:评论总数

wp_terms
term_id:分类ID
name:分类名
slug:缩略名
term_group:未知

wp_term_relationships
object_id:对应文章ID/链接ID
term_taxonomy_id:对应分类方法ID
term_order:排序

wp_term_taxonomy
term_taxonomy_id:分类方法ID
term_id:taxonomy:分类方法(category/post_tag)
description:未知
parent:所属父分类方法ID
count:文章数统计

wp_usermeta
umeta_id:自增唯一ID
user_id:对应用户ID
meta_key:键名
meta_value:键值

wp_users
ID:自增唯一ID
user_login:登录名
user_pass:密码
user_nicename:昵称
user_email:Email
user_url:网址
user_registered:注册时间
user_activation_key:激活码
user_status:用户状态
display_name:显示名称

最近在为客户做一个库存升级改造的项目,之前客户的数据管理全部是在Excel中操作,估计以前也是没有意识到数据量变大以后,工作会变得如此困难,基本上处于一个无法操作的程度了。于是我们将旧版本的Excel表格格式化以后,导入到新开发的MySQL数据库中发现一个比较有趣的问题:Excel导入MySQL日期为0000-00-00了。

这个问题客户肯定是不能接受的,其实我们已经事先在Excel表中将日期字段设定为日期类型,而且在MySQL中的数据结构也是DATE类型,原以为是不会出错的。经过思考,我们决定用一个低级但很实用的办法来解决这个问题。

第一步:重新格式化Excel日期这个字段。选中日期列→右键单击→设置单元格格式...→自定义→在日期前面加一个特殊字符,这里以a为例,如下图:
a.jpg
设置单元格格式
b.jpg
自定义单元格格式
c.jpg
设置好单元格格式

第二步:选中已经发生格式变化的日期数据,这个时候双击某一个单元格,可以发现那个a会消失,这是因为那个a只是一个格式,所以我们需要把它处理成真正的文本内容:复制并粘贴到记事本中,然后再从记事本中复制粘贴回来,并替换掉现在的内容。

第三步:在MySQL中把日期字段的字符类型修改为varchar(255),接下来就可以把处理后的Excel导入MySQL了。然后使用SQL语句,对已经成功导入但是含有一个a字母的数据进行修改,所使用的SQL语句为:update 表名 set 字段名=replace(字段名,´a´,´´);

第四步:在MySQL中,把日期字段的字符类型重新修改为DATE,然后,然后就大功告成了!

总的说来,这个方法真的没有什么技术含量,但是确确实实是非常实用的,当你在使用其他高科技方法出现错误或效率十分低下的时候,不妨试试我这个笨方法,不但有效,而且速度还很快!至于Excel要如何导入MySQL这里就不再赘述了,后面有时间再单独整理发文,感谢观看,转载请注明出处!

转载自:http://www.chuangluo.com/news_457.html

加/的意义在于让这个标签或分类成为一个目录,拥有更高的权重,利于seo。

在主题function.php中加入

function nice_trailingslashit($string, $type_of_url) {
if ( $type_of_url != 'single' )
$string = trailingslashit($string);
return $string;
}
add_filter('user_trailingslashit', 'nice_trailingslashit', 10, 2);

有时候经常会用到excel导入与导出数据,但对于mysql命令不熟悉的来说,用excel更为直接方便。

1、把linux系统下的时间改为友好阅读时间:

    
//TEXT是格式化,A2指表格位置
=TEXT((A2+8*3600)/86400+70*365+19,"yyyy-mm-dd HH:mm:ss")
//原A2表格中的时间:1473992001,转换后结果:2016-09-16 10:13:21

=TEXT(D2+TIME(8,0,0),"yyyy-mm-dd HH:mm:ss")
//给时间批量加8小时,D2代表单元格,(8,0,0)代表(小时,分,秒)
//执行结果为:2016-09-16 18:13:21

2、截取单元格内前面100个字
完整公式如下:=left(C2,100)
然后使用下拉——》复制 ——》选择性粘贴 ——》粘贴文本

3、2个单元格内容批量合并
完整公式:=A1&A2 //&输入为键盘的:shift+7
然后使用下拉——》复制 ——》选择性粘贴 ——》粘贴文本

4、2张表筛选合并数据
完整公式:点击空白单元格——>插入fx函数——>选择VLOOKUP
查找值:A2 /共同主键,比如:id
数据表:Sheet2!$A:$B //$A为匹配ID,$B为数据
列序数:2 //从第2栏开始
匹配条件:0 //表示模糊匹配
TIM截图20171224103457.jpg
参考:百度百科

一、同一张表中数据合并mysql中新增查询

SELECT sid, GROUP_CONCAT(filename SEPARATOR ';')
FROM pictures_copy
GROUP BY sid;

第1行:sid代表主字段名,filename代表要合并的字段名
第2行:pictures_copy代表数据表
第3行:sid代表主字段名

mysql中新增查询
简单来说,可以通过:

mysql> SELECT id , GROUP_CONCAT(name) name
    -> FROM a 
    -> GROUP BY id;

来获得这样的结果集:

+------+---------+
| id   | name    |
+------+---------+
| 1    | A,A,B,C |
| 2    | A,B     |
+------+---------+

当然也可以对其的分隔符进行修改:

mysql> SELECT id, GROUP_CONCAT(name SEPARATOR ';')
    -> FROM a
    -> GROUP BY id;

这将使分隔符改为" ; "

同样也可以对name列进行排序:

mysql> SELECT id, GROUP_CONCAT(name ORDER BY name DESC) name
    -> FROM a
    -> GROUP BY id;
+------+---------+
| id   | name    |
+------+---------+
| 1    | C,B,A,A |
| 2    | B,A     |
+------+---------+
2 rows in set (0.00 sec)

当然官方还给出了可以通过DISTINCT来排除冗余
用法如下:

mysql> SELECT id, GROUP_CONCAT(DISTINCT name) name
    -> FROM a
    -> GROUP BY id;
+------+-------+
| id   | name  |
+------+-------+
| 1    | A,B,C |
| 2    | A,B   |
+------+-------+
2 rows in set (0.00 sec)

SELECT sid, GROUP_CONCAT(filename SEPARATOR ';')
FROM pictures_copy
GROUP BY sid;

第1行:sid代表主字段名,filename代表要合并的字段名
第2行:pictures_copy代表数据表
第3行:sid代表主字段名

二、2张表合并

UPDATE subject,img  //subject 和 img分别为2张表
SET subject.img = img.img    /共同的img字段
WHERE  
subject.sid = img.sid;    /2个相加

将以下代码添加到配置文件中即可,比如网站路径:root /home/wwwroot/www;下面

if ($scheme = http ) {
    return 301 https://$host$request_uri;
}
    add_header Strict-Transport-Security max-age=15768000;

wordpress自带的链接太过麻烦,4.8以后还得开启,还不如直接写在footer中管理更方便,就是切记不要随意覆盖模板。但加在footer中会有个问题:整站都展示友情链接了,这对于优化和美观都不利。
wordpress有个是否首页的判断,只要判断是首页则显示,不是首页则不显示,就可以完美解决,而且代码量少,把以下代码加在footer中即可:

<?php if ( (is_home() || is_front_page()) && !is_paged() ) { ?>
    <div id='link'><span>友情链接:</span>
<li><a href="#">1111</a></li>
<li><a href="#">2222</a></li>
    </div>
<?php } ?>

css自己改成符合主题的即可,就几行代码。

linux主要用于服务器领域,而在服务器上执行一项服务是永无止境的,除非遇到特殊情况,否则不会关机。和Windows不同,在linux系统下,很多进程是在后台执行的。在屏幕背后,可能有很多人同时在工作。如果直接按下电源的按钮,其他人的数据可能就此中断。更严重的是,若不正常关机,严重的话,可能会造成文件系统损坏,从而导致数据丢失。

      如果要关机,必须保证当前系统中没有其他用户在登录系统。我们可以使用who命令查看是否还有其他人登录,或者使用命令ps -aux查看是否还有后台进程运行。`shutdown,halt,poweroff`都为关机的命令,我们可以使用命令`man shutdown`查看其帮助文档。例如,我们运行如下命令关机。

shutdown -h 10        #计算机将于10分钟后关闭,且会显示在登录用户的当前屏幕中
shutdown -h now       #计算机会立刻关机
shutdown -h 22:22     #计算机会在这个时刻关机
shutdown -r now       #计算机会立刻重启
shutdown -r +10       #计算机会将于10分钟后重启
reboot                #重启
halt                  #关机

在使用wp_head() 函式时,WordPress会自动生成一个多余的.recentcomments样式,没什么用,去掉了代码更简洁!

把这段代码加到主题的functions.php文件中即可:

/移除头部多余.recentcomments样式
function Fanly_remove_recentcomments_style() {
    global $wp_widget_factory;
    remove_action( 'wp_head', array( $wp_widget_factory->widgets['WP_Widget_Recent_Comments'], 'recent_comments_style' ) );
}
add_action( 'widgets_init', 'Fanly_remove_recentcomments_style' );

内容来自泪雪博客

WordPress默认情况下的标签页(tag)、分类目录(category),是没有canonical标签的。有时候出于需要,想给tag和category都加上canonical标签,那么下面的代码就可以完美解决你的需求。

先保证你的主题相关主题文件中包含了<?php wp_head(); ?>代码(通常是在header.php文件中),然后把下面代码加入到主题的funshion.php文件中即可。

 //完美的canonical
    remove_action( 'wp_head', 'rel_canonical' );
    function my_rel_canonical() {
    global $post;
    if (is_single() || is_page()) {
    echo "<link rel=\"canonical\" href=\"" . get_permalink( $post->ID ) . "\" />\n";
    }
    if (is_home() && is_paged()) {
    echo "<link rel=\"canonical\" href=\"".home_url("/")."\" />\n";
    }
    if (is_category() || is_category() && is_paged()) {
    echo "<link rel=\"canonical\" href=\"".get_category_link(get_query_var('cat'))."\" />\n";
    }
    if (is_tag() || is_tag() && is_paged()) {
    echo "<link rel=\"canonical\" href=\"".get_term_link(get_query_var('tag'), 'post_tag')."\" />\n";
    }
    if (is_search() || is_search() && is_paged()) {
    echo "<link rel=\"canonical\" href=\"".get_search_link(get_query_var('search'))."\" />\n";
    }
    if (is_author()) {
    echo "<link rel=\"canonical\" href=\"".get_option('home')."\" />\n";
    }
    if (is_date()) {
    echo "<link rel=\"canonical\" href=\"".get_option('home')."\" />\n";
    }
    }
    add_action('wp_head', 'my_rel_canonical');

今天想给一个wordpress做的网站添加下相关文章,这样更有利于搜索引擎的蜘蛛爬取,wordpress用插件会影响速度,所以就直接在代码中解决,不用插件。

singel.php中添加下列代码即可:

<!-- 相关文章 -->
                        <ul id="cat_related"><h3>您可能关注:</h3>
    <?php
    global $post;
    $cats = wp_get_post_categories($post->ID);
    if ($cats) {
        $args = array(
              'category__in' => array( $cats[0] ),
              'post__not_in' => array( $post->ID ),
              'showposts' => 6,
              'caller_get_posts' => 1
          );
      query_posts($args);
      if (have_posts()) {
        while (have_posts()) {
          the_post(); update_post_caches($posts); ?>
      <li>&raquo; <a href="<?php the_permalink(); ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></li>
    <?php
        }
      }
      else {
        echo '<li>&raquo; 暂无相关文章</li>';
      }
      wp_reset_query();
    }
    else {
      echo '<li>>&raquo; 暂无相关文章</li>';
    }
    ?>
    </ul>
   <!--  相关结束 -->

补充一句:以上代码是获取同分类下的文章,按时间排序。
具体样式,自己可以在style.css中再加一点