Mysql查询独特的slugs

时间:2017-06-09 12:13:00

标签: php mysql wordpress

我已经制作了一个wordpress插件来查找和替换数据库中的关键字,其中admin提供了查找和替换的关键字,然后MYSQL查询执行DB中的更改。
但我想知道如何避免重复的slu .. 例如:
好像有两个帖子有以下slu ::

  1. firstpost
  2. secondpost
  3. 然后管理员运行查询并想要用“first”替换“second”。 然后结果将是:

    update wp_posts set `post_name` = replace(post_name, 'second','first') where post_type='post'
    
    1. firstpost
    2. firstpost
    3. 有没有办法让slu the独一无二?

1 个答案:

答案 0 :(得分:1)

此更新查询与派生表一起使用,以检查更改是否会创建重复的slug。如果愿意的话,可以在现有的slug中附加一个数字,用于复制。

UPDATE 
  wp_posts p, 

  (SELECT 
     REPLACE(post_name,'second', 'first') AS post_name 
   , COUNT(post_name) AS num_dupes 
   FROM 
     wp_posts WHERE post_type = 'post' 
   GROUP BY 
     REPLACE(post_name, 'second', 'first')) d

SET p.post_name = CONCAT(REPLACE(p.post_name, 'second', 'first'), 
         CASE WHEN num_dupes > 1 THEN num_dupes - 1 ELSE '' END)

WHERE
  p.post_type='post' AND 
  p.post_name = d.post_name

在我看来,这是比在post_name字段上使用唯一约束更好的解决方案,因为a)您不需要对wordpress数据库进行自定义DML更改,并且b)您可以防止出现重复的问题,并且在错误发生之前必须处理错误。