我在Wordpress(4.3.1)上使用一个名为Event Manager的插件来创建一个事件日历。事件通过Wordpress上的页面添加,有关每个事件的数据存储在一个名为" wp_em_events"在Wordpress MySQL数据库中。在输入事件信息的页面上,我添加了要选择的城市列表,这些是Wordpress类别。这些用于为每个城市创建活动日历。例如,我使用此短代码为波士顿的事件创建日历页面:[events_calendar full = 1 category =" Boston"]。
我想在表中包含类别名称,其中存储了所有其他事件信息(wp_em_events),以便我可以按城市查询此表。
我正在使用phpMyAdmin中的触发器来获取添加到wp_em_events表的类别名称。找到类别名称有点困惑,但这是它的工作原理:
在wp_em_event表中,每个新事件都有一个post_id。
wp_em_event表中的post_id与wp_term_relationships表中的object_id匹配。
wp_term_relationships表中的term_taxonomy_id与wp_term_taxonomy表中的term_id匹配。
wp_term_taxonomy中的term_id与wp_terms表中的term_id匹配。 wp_terms还包含变量“name”,它是类别的名称(例如,Boston)。
换句话说:
wp_em_events.post_id = wp_term_relationship.object_id
wp_term_relationship.term_taxonomy_id = wp_term_taxonomy.term_id
wp_term_taxonomy.term_id = wp_terms.term_id
所以,我在wp_em_events中创建了一个名为“chapter”的新字段。如果我使用这个sql代码,我可以将类别名称添加到章节:
UPDATE wp_em_events
LEFT JOIN wp_term_relationships on (wp_em_events.post_id = wp_term_relationships.object_id)
LEFT JOIN wp_term_taxonomy on (wp_term_relationships.term_taxonomy_id=wp_term_taxonomy.term_taxonomy_id)
LEFT JOIN wp_terms on (wp_term_taxonomy.term_id=wp_terms.term_id)
SET wp_em_events.chapter = wp_terms.name;
我想设置一个触发器,每次将新行插入wp_em_events时,将wp_terms.name插入到wp_em_events.chapter中。我使用以下代码创建了触发器:
DROP TRIGGER IF EXISTS `test`;
CREATE DEFINER=`wordpressuser202`@`localhost` TRIGGER `test`
BEFORE INSERT ON `wp_em_events`
FOR EACH ROW
BEGIN
UPDATE wp_em_events
LEFT JOIN wp_term_relationships on (NEW.post_id = wp_term_relationships.object_id)
LEFT JOIN wp_term_taxonomy on (wp_term_relationships.term_taxonomy_id=wp_term_taxonomy.term_taxonomy_id)
LEFT JOIN wp_terms on (wp_term_taxonomy.term_id=wp_terms.term_id)
SET NEW.chapter = wp_terms.name;
END
UPDATE语句中唯一的区别是我更改了wp_em_events。新的。所以post_id和chapter引用要插入的新行的列。但是,当我插入新记录时,出现错误:
有关如何解决此问题的任何想法?