2017-01-17 1 views
1

Ce n'est pas WordPress spécifique, mais il est intéressant de noter que c'est un WP db Je travaille avec ...mise à jour groupée table MySQL avec les données concaténés d'une autre table

Je dois mettre à jour la valeur de la table postspost_title pour toutes les entrées avec post_type='appearance'. Le post_title actuel commence par le nom désiré, mais il se termine par "apparence [un peu]". Donc, de "l'apparence" à la fin doit être retiré, et il doit être remplacé par le meta_value du tableau postmetameta_key = _place_id et post_id est égal à la ID du tableau posts. Par exemple: il y a un article avec l'ID 102 intitulé "Apparence de John Doe 102". Dans le tableau postmeta, où meta_key = _place_id et post_id = 102, meta_value = 108. Ainsi, le résultat final serait post_title = John Doe 108.

Ceci est compliqué au-delà de moi, mais j'imagine qu'une jointure est nécessaire. Et je pense que deux requêtes distinctes auraient du sens. Donc, quelque chose de similaire à:

UPDATE posts 

SET post_title = TRIM(TRAILING ' appearance %' FROM post_title) 

WHERE post_type='appearance' 

et

UPDATE posts 

left join postmeta on 
    posts.ID= postmeta.post_id 
set 
    posts.post_title = CONCAT(posts.post_title, " ", postmeta.meta_value WHERE postmeta.meta_key = '_place_id') 

Répondre

1

Vous pouvez le faire en une seule requête en utilisant SUBSTRING_INDEX():

UPDATE posts p 
LEFT JOIN postmeta pm 
    ON p.ID = pm.post_id 
SET p.post_title = CONCAT(SUBSTRING_INDEX(p.post_title, 'appearance', 1), pm.meta_value) 
WHERE pm.meta_key = '_place_id' 

Prendre SUBSTRING_INDEX('John Doe appearance 102', 'appearance', 1) renverrait tout avant l'apparition de appearance, qui est John Doe (avec un espace à la fin) . Ensuite, nous pouvons simplement concaténer sur le meta_value.

+0

Ça a l'air génial. Malheureusement, je reçois une erreur: 'Nombre de paramètres incorrect dans l'appel à la fonction native 'SUBSTRING_INDEX'' – David

+0

@David Désolé, corrigé une faute de frappe, cela devrait fonctionner maintenant. –

+0

Merci. Beau. Une chose qui manquait, mais s'est avéré bien, spécifiait le post_type. – David