/ / Mysql Abfrage für eindeutige Slugs - PHP, MySQL, WordPress

Mysql Abfrage für eindeutige Slugs - PHP, MySQL, WordPress

Ich habe ein Wordpress-Plugin gemacht, um Schlüsselwörter in der Datenbank zu finden und zu ersetzen, wo der admin Schlagworte zur Verfügung stellt und ersetzt, und dann führt die MYSQL-Abfrage die Änderungen in DB durch.
Aber alles was ich wissen will ist der Weg die Duplikate zu vermeiden.
Beispielsweise :
Als ob es zwei Pfosten mit folgenden Schnecken gibt:

  1. erster Beitrag
  2. zweiter Beitrag

und dann führt admin die Abfrage aus und möchte "zweite" durch "erste" ersetzen. dann wird das Ergebnis sein:

update wp_posts set `post_name` = replace(post_name, "second","first") where post_type="post"
  1. erster Beitrag
  2. erster Beitrag

Gibt es eine Möglichkeit, die Schnecken einzigartig zu halten?

Antworten:

1 für die Antwort № 1

Diese Aktualisierungsabfrage arbeitet mit einer abgeleiteten Tabelle, um zu überprüfen, ob die Änderung einen doppelten Slug erstellen würde. Wenn dies der Fall wäre, wird eine Nummer an den existierenden Slug für das Möchtegern-Duplikat angehängt.

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

Meiner Meinung nach ist dies eine bessere Lösung alsVerwenden einer eindeutigen Einschränkung für das Feld post_name, weil a) Sie keine benutzerdefinierten DML-Änderungen an der Wordpress-Datenbank vornehmen müssen und b) Sie das Auftreten eines Duplikats verhindern und den Fehler behandeln müssen, bevor er auftritt.