MYSQL - 如果不在类别中并且正则表达式匹配内容,则:(添加到类别并从其他类别中删除)
Posted
技术标签:
【中文标题】MYSQL - 如果不在类别中并且正则表达式匹配内容,则:(添加到类别并从其他类别中删除)【英文标题】:MYSQL - if not in category and regex matches content then: (add to category and delete from other category) 【发布时间】:2021-05-19 14:22:55 【问题描述】:如果满足条件,我想将帖子添加到一个类别并从另一个类别中删除:正则表达式匹配内容并且不在某个类别中。
所以点数:
动作:
将帖子添加到 A 类 从 B 类中删除这些帖子如果条件:
帖子内容与某些正则表达式匹配 不属于 C 类我有两个 sn-ps 的 SQL 代码,我在组合时遇到了麻烦。
---sn-p 1--- 根据帖子中的正则表达式添加到类别------
REPLACE INTO wp_term_relationships (term_taxonomy_id, object_id) SELECT '141', ID
FROM `wp_posts`
WHERE (post_title REGEXP '((?<!\\b[A-Z]|\\b[A-Z][A-Z])\\$|\\bAU?\\$|CA?N?\\$)[^\\d\\r\\n]?((?:\\d1,10[,. ])*\\d1,10)[ .]?(k)?|((?:\\d1,10[,. ])*\\d1,10)[ .]?(k)? ?(?:USD?\\b|dollar|cash|\\bbucks\\b|GBP|EURO?S?\\b|AUD\\b|CAD\\b|INR\\b)'
OR post_content REGEXP '((?<!\\b[A-Z]|\\b[A-Z][A-Z])\\$|\\bAU?\\$|CA?N?\\$)[^\\d\\r\\n]?((?:\\d1,10[,. ])*\\d1,10)[ .]?(k)?|((?:\\d1,10[,. ])*\\d1,10)[ .]?(k)? ?(?:USD?\\b|dollar|cash|\\bbucks\\b|GBP|EURO?S?\\b|AUD\\b|CAD\\b|INR\\b)')
AND (post_type = 'post' )
---sn-p 2--- 从一个类别中删除另一个类别中的帖子------
DELETE FROM wp_term_relationships
WHERE term_taxonomy_id = 160 #@CategoryID
AND object_id NOT IN
(SELECT object_id FROM (SELECT * FROM wp_term_relationships) AS tr2
WHERE tr2.term_taxonomy_id = 161); #@OtherCategoryID
sn-p 2 是我能找到的与我想做的事情足够接近的全部。
似乎无法在一个语句中将所有内容一起工作
【问题讨论】:
【参考方案1】:另一种方法是使用事务。(您必须使用支持它们的表架构,现在您可能会这样做。)
“事务”是一个原子操作:要么是“所有事情都同时发生”(COMMIT
),要么是“什么都不做”(ROLLBACK
)。现在,在事务中,您可以执行多个查询来完成工作,而其他用户将看不到中间状态。当您提交事务时,他们会立即看到完成的结果——除非他们也在事务的中间。
这是一个故意简单化的解释......但你明白了。现在您不必“在一个查询中完成所有操作”。
【讨论】:
以上是关于MYSQL - 如果不在类别中并且正则表达式匹配内容,则:(添加到类别并从其他类别中删除)的主要内容,如果未能解决你的问题,请参考以下文章