首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

wordpress 稿件索引 存储过程

2014-01-14 
wordpress 文章索引 存储过程?实现是不怎么复杂的。乱码坑碰到的第一个坑是乱码,由于MySQL采用源码安装,且

wordpress 文章索引 存储过程

?

实现是不怎么复杂的。

乱码坑

碰到的第一个坑是乱码,由于MySQL采用源码安装,且安装时没有指定默认编码,所以MySQL使用的默认是 latin1 字符集,好在wordpress在创建表时把表的编码指定为 utf8,不然处理要更多点,关于编码的解决可以看 MySQL 乱码 与 字符集。

触发器坑

存储过程测试ok后,自然就是用触发器来调用了,触发器也很简单:

SET NAMES utf8;use blog;delimiter //drop trigger if exists trigger_updateIndex;create trigger trigger_updateIndex after insert on wp_posts for each row begin     if new.post_status = 'publish' then        call sp_updateIndex;    end if;end//

触发器的创建没有问题,但是却出现 ERROR 1442 (HY000): Can't update table 'wp_posts' in stored function/trigger because it is already used by statement which invoked this stored function/trigger. 异常。

之所以变成坑是因为我一开始直接在页面上进行测试,所以出错了也看不到,只是发现没效果就觉得出问题了。后来在命令行下直接插入才看到错误信息的。

google一番后,知道这是MySQL的一个限制,不能在触发器里对本表进行更新操作,本表就是触发器创建时用 on 指定的表。网上有一些人的解决方法不适用于我这里,因为需求不同,他们的场景是如果新的记录满足一定的条件就更新新的记录,这样可以用 set 语句结合 before 搞定,而我这里是要更新与新记录不同的某一条记录。所以用触发器是行不通了。

解决的一个方法就是在程序里解决,调用插入成功后在执行这个存储过程,不过对wordpress和php都不了解,就不想这样搞了。

现在用 cron 调度 加脚本的方式来搞,脚本的内容: /absolute/path/to/mysql -u username --password='password' < /absolute/path/to/trigger.sql

trigger.sql:

use blog;set names utf8;call sp_updateIndex;

个人博客的发表频率是很低的,把频率设置为每天一次已完全足够。

热点排行