指穷于为薪,火传也,不知其尽也。—《养生主》

Daily English:He is a wise man who speaks little.

13个你希望早点知道的实用WordPress SQL查询语句

子乌注:嗯,这篇文章算是蛮实用的一篇WordPress的底层操作手册,可以让你迅速找到你想做的事情而不是在WordPress的复杂语境里迷路,随手翻译之,并存档备用。

WordPress的用户应该都了解,WordPress是基于MySQL数据库。然而,如果你只是刚刚从我们这里知道这一点,下面这些是你应该了解的。MySQL是一个免费的关系型数据库管理系统 ,绝大多数web服务器都支持它。所有的WordPress数据,如posts、评论、设置,都存储于MySQL数据库中。如果你希望对MySQL了解更多,你可以去WordPress的数据库描述看看。

举个例子,如果你需要改WordPress中的一些全局的信息,那你得在每条记录里穿梭,耗费你大量的时间并且得面对发生人工错误的可能。而直接在你的WordPress数据库中简单地运行一条SQL语句,你可以让上面所说的工作变得轻松而有效率。

而下面就是一些能够在你使用WordPress时提供帮助的SQL语句。

备份你的WordPress数据库

在你对你的数据库做任何操作之前(除非你对自己的SQL执行结果很有信心),请务必备份你的数据库。在你做出任何重大的改变之前备份一下数据库是一个良好的习惯。这保证了无论数据库发生了何种错误,你总是能够将它恢复。

你可以下载WP-DB-BackupWP-DBManager插件,它们能够让你在你的WordPress面板中备份你的数据库。或者,你也可以通过phpMyAdmin来手动备份。

嗯,如果你决定手动备份你的WordPress数据库,跟着我做底下这些步骤:

  1. 登录你的phpMyAdmin
  2. 选择WordPress数据库
  3. 单击顶部导航栏里的Export(导出)
  4. 选择你想备份的表,或者选择所有的表来备份整个数据库;
  5. 导出选项选择SQL,导出为.sql后缀的文件;
  6. 勾选复选框“Save as file(另存为文件)” ;
  7. 选择compression type(压缩格式),选择gzipped,这样备份文件会小一些;
  8. 最后点一下Go(确定?OK?执行?),会跳一个下载窗口出来提示你保存你的备份数据库文件。

针对WordPress的13条SQL语句

运行下面提供的SQL语句的简单方法当然就是使用phpMyAdmin(一般来说,有装WordPress的服务器应该都有phpMyAdmin吧?)。phpMyAdmin是一个最常用的MySQL数据库查询与编辑工具。绝大多数web服务器的控制面板都有提供这个选项。这里也有一个名为WordPress SQL Executioner的WordPress插件允许你执行你的SQL语句。

依照以下的步骤来使用phpMyAdmin:

  1. 登录phpMyAdmin面板并选择你的WordPress数据库。
  2. 单击SQL栏,进入一个带有SQL查询框的页面。

你可以在如下图所示的这个SQL查询框中输入你的SQL语句。

注:所有的语句都是单纯的SQL查询,并且假定你使用的是标准的表前缀“wp_”。 如果你使用不同的表前缀,请自行修改相应的语句。

修改站点链接(Siteurl)和首页链接(Homeurl)

WordPress将站点链接与首页链接的绝对路径存储于数据库中。因此,如果你将你的WordPress站点从本地主机复制到服务器上,你的站点将无法正确运行。这是因为绝对路径依然是指向你的本地主机。你需要将站点链接与首页链接修改以使站点跑起来。

解决:

Language:  MySQL
UPDATE wp_options SET 
option_value = replace(option_value, 'http://www.旧的地址.com', 'http://www.新的地址.com') 
WHERE option_name = 'home' OR option_name = 'siteurl';

修改GUID

当你将你的blog从本地主机移植到你的服务器或者从其他域名转移到新的域名,你需要修改表wp_posts中字段GUID的网址。如果填写错误将会造成严重错误,因为GUID用于将你的post或者页面解析为正确的链接地址。

解决:

Language:  MySQL
UPDATE wp_posts SET guid = 
REPLACE (guid, 'http://www.oldsiteurl.com', 'http://www.newsiteurl.com');

修正内容中的URL

当存储数据库的时候,WordPress将使用URL链接的绝对地址而非相对链接。因此你需要修正所有将指向新域名地址的链接。

解决:

Language:  MySQL
UPDATE wp_posts SET post_content = 
REPLACE (post_content, 'http://www.oldsiteurl.com', 'http://www.newsiteurl.com');

只修改图片路径

如果你决定使用Amazon CloudFront作为你的内容分发网络(CDN)以减少你服务器上图片的分发量。当你创建完成你的CNAME记录,你能够使用下面的SQL语句来修改WordPress中所有图片地址,让你的图片从Amazon CloudFront中加载。

解决:

Language:  MySQL
UPDATE wp_posts SET post_content = 
REPLACE(post_content, 'src="http://www.oldsiteurl.com', 'src="http://yourcdn.newsiteurl.com');

同时你也需要使用以下SQL更新图片附件的GUID:

Language:  MySQL
UPDATE wp_posts SET  
guid = REPLACE (guid, 'http://www.oldsiteurl.com', 'http://yourcdn.newsiteurl.com') 
WHERE post_type = 'attachment';

更新post meta

更新post meta的做法与更新post内容中的链接几乎是一样的写法。如果你在每个post中储存了额外的链接数据,你可以使用以下的语句来批量修改。

解决:

Language:  MySQL
UPDATE wp_postmeta SET meta_value = 
REPLACE (meta_value, 'http://www.oldsiteurl.com','http://www.newsiteurl.com');

改变默认的”Admin”用户名

默认的WordPress安装将会使用默认的“Admin”用户名创建一个帐户。使用WordPress的用户都知道这个。问题在于这有可能成为一个安全漏洞,因为黑客能够暴力破解你进入你的WordPress管理面板(子乌注:登录时启用防spam的随机验证会好一些)。如果你能够修改你默认的“Admin”用户名,你可以让你的WordPress管理面板安全一些。

解决:

Language:  MySQL
UPDATE wp_users SET user_login = 
'新的用户名' WHERE user_login = 'Admin';

重置密码

你是不是曾经试过重置你的WordPress密码,但是无论怎样都无法实现这个目标?

解决:

Language:  MySQL
UPDATE wp_users SET user_pass = 
MD5( '新密码' ) WHERE user_login = '你的用户名';

将作者甲的所有文章分配给作者乙

如果你试着将作者甲的所有文章合并到作者乙的名下,如果你一篇文章一篇文章地修改将会是一个漫长的工作。使用下面的SQL语句(为啥我看到这句话就觉得好像卖膏药的?),你可以轻易地进行上述操作。

你首先需要在你的WordPress管理面板中访问作者与用户页面取得这两个作者的ID。单击用户名查看他们的描述。在浏览器的地址栏,找到”user_id“。这就是我们需要的作者ID信息

解决:

Language:  MySQL
UPDATE wp_posts SET 
post_author = '新作者id' 
WHERE post_author = '旧作者id';

删除修订

当你在WordPress中编辑文章的时候,WordPress会保存你编辑文章的许多修订版。这是对资源的浪费,因为过多的修订记录会增加数据库的负担。时间一长,当你拥有成千上万条记录的时候,你的数据库将成倍增长。这将增加循环次数、数据列举,并将延长页面加载时间。

解决:

Language:  MySQL
DELETE a,b,c FROM wp_posts a
LEFT JOIN wp_term_relationships b ON (a.ID = b.object_id)
LEFT JOIN wp_postmeta c ON (a.ID = c.post_id)
WHERE a.post_type = 'revision'

源代码来自于: Lester chan

注: 请记住,所有post的修订都将会被删除,包括post meta。

删除post meta

对WordPress来说,安装或删除插件是一个非常常用的任务。一些插件会使用post meta来储存与插件有关的数据。当你删除插件的时候,这些数据将依然存在于post_meta表(即使再也不需要)。运行下列语句来清空无用的post meta值。这会有助于数据库的提速并减肥。

解决:

Language:  MySQL
DELETE FROM wp_postmeta WHERE meta_key = '你的meta key';

导出所有未重复的评论电子邮件

在一段时间里,你的blog将会收到很多评论。这些评论都包含有评论者的电子邮件地址。你可以将这些电子邮件地址不重复地加入你的电子邮件列表。

解决:

Language:  MySQL
SELECT DISTINCT comment_author_email FROM wp_comments;

你得到查询结果之后,可以在phpMyAdmin的标签Query results operations(查询结果操作)下,选择“导出”来导出所有的电子邮件地址。

删除所有Pingback

热门文章会收到大量pingback。这会增加你的数据库大小。为了给你的数据库减肥,你可以试着删除所有的pingback。

解决:

Language:  MySQL
DELETE FROM wp_comments WHERE comment_type = 'pingback';

删除所有垃圾评论

如果你有相当多的垃圾评论,去每个页面删除垃圾信息很乏味并让人沮丧(子乌注:那你为啥不去管理面板的评论页中直接删除垃圾评论??)使用下面的SQL语句,即使面对超过500条的垃圾评论,也可以轻而易举地删除它们(子乌注:只要服用了我们独家出产的大力丸,你就可以力举五牛,夜御十女,oyeah~~

解决:

Language:  MySQL
DELETE FROM wp_comments WHERE comment_approved = 'spam';
  • 0 = 等待审核的评论
  • 1 = 通过审核的评论
  • spam = 标记为垃圾(spam)的评论

标识未使用的标签(tag)

在WordPress数据库中,如果你使用SQL手动删除旧post,旧的标签依然会显示在你的标签云/列表中。这可以让你标识这些未使用的标签,并删除它们。

解决:

Language:  MySQL
SELECT * FROM wp_terms wt
INNER JOIN wp_term_taxonomy wtt ON wt.term_id=wtt.term_id
INNER JOIN wp_term_relationships wtr ON wtr.term_taxonomy_id=wtt.term_taxonomy_id
LEFT JOIN wp_posts wp ON wp.ID=wtr.object_id
WHERE taxonomy='post_tag'
AND ID IS null
AND NOT EXISTS(SELECT * From wp_terms wt2
                INNER JOIN wp_term_taxonomy wtt2 ON wt2.term_id=wtt2.term_id WHERE wtt2.parent=wt.term_id) ORDER BY name;

源代码来自于:Snipplr

Start Querying!

如果你需要进行一些性能优化、数据清理或者进行跨域的WordPress迁移,上述SQL语句将会很有用并让你事半功倍。如果你有任何针对WordPress的实用的SQL语句欢迎与我们分享(去他们的网站留言)。

分享家:Addthis中国

Comments on: "13个你希望早点知道的实用WordPress SQL查询语句" (5)

  1. 比较有用的语句,收藏了!

    [回复]

  2. 童鞋你好,提醒你本页面页面有错误哦!
    头部那

    Warning: preg_match() [function.preg-match]: Compilation failed: nothing to repeat at offset 58 in /var/www/html/sheneyan/sheneyan.com/blog/wp-content/plugins/wp-postviews-plus/postviews_plus.php on line 106

    [回复]

    子乌 回复:

    呃……之前在调试另一个地方的问题时把php的错误提示打开了,谢谢提醒

    [回复]

Leave a comment for: "13个你希望早点知道的实用WordPress SQL查询语句"

*

Tag Cloud