2014-07-14 4 views
5

Einige HintergrundgeschichteInsert mehrere statische Werte für mehrere Variable IDs

Ich arbeite in Wordpress v3.9.1 über das Plugin Advanced (nicht direkt relevant für meine Frage, aber vielleicht jemand anderes kann meine Methode verwenden) Benutzerdefinierte Felder. Ich habe eine CSV-Datei von benutzerdefinierten Werten (mit WP Ultimate CSV Importer-Plugin, kostenlose Version) aus der alten Datenbank, formatiert, wie ich in WordPress mit einer Ausnahme importiert - ACF Repeater-Felder importiert. Das Plugin ist großartig, aber es gibt noch keine gute Methode, um viele Daten zu importieren.

Repeater Felder werden in der Datenbank gespeichert sind, wie folgt:

meta_id post_id meta_key   meta_value 
3894  4697 beds    2 
3895  4697 _beds    field_53bcfe244a98d 
4051  4697 _beds_0_other  field_53c2273053218 
4050  4697 beds_0_other  1 
4051  4697 _beds_1_other  field_53c2273053218 
4050  4697 beds_1_other  3 

5894  4698 beds    2 
5895  4698 _beds    field_53bcfe244a98d 
5051  4698 _beds_0_other  field_53c2273053218 
5050  4698 beds_0_other  1 
5051  4698 _beds_1_other  field_53c2273053218 
5050  4698 beds_1_other  3 

Das heißt; Für jede Post-ID gibt es ein Repeater-Feld namens "Betten". "In" ist das Repeaterfeld 1 Feld, zweimal wiederholt. Jedes Feld hat 2 Datenbankeinträge - eine Feldreferenz (zur Verwaltung von Speicherfeldern - immer die gleiche pro Feld) und einen Wert. Es ist nicht so intuitiv wie es sein könnte, aber es basiert auf dem Standard-Tabellensystem von WordPress.

Tatsächliche Frage

Gerade jetzt, ich Felder aus meiner alten Datenbank importiert haben, die wie folgt aussehen:

meta_id post_id meta_key   meta_value 
####  4697 beds    2 
####  4697 beds_0_other  1 
####  4697 beds_1_other  3 

####  4698 beds    2 
####  4698 beds_0_other  1 
####  4698 beds_1_other  3 

I

meta_id post_id meta_key   meta_value 
####  4697 _beds    field_53bcfe244a98d 
####  4697 _beds_1_other  field_53c2273053218 
####  4697 _beds_0_other  field_53c2273053218 

####  4698 _beds    field_53bcfe244a98d 
####  4698 _beds_1_other  field_53c2273053218 
####  4698 _beds_0_other  field_53c2273053218 

meta_key hinzufügen müssen und meta_value sind statisch - sie ändern sich nie (nachdem das Feld erstellt wurde, behält es das gleiche Feld _ ## bis zum Löschen bei). meta_id ist automatisch erhöht.

Das Problem ist, dass ich mehr als 200 Post_id-Werte haben, die jeweils 50 statische Einträge benötigen - nicht hart Code zu programmieren. Ich kann die erforderlichen IDs wählen die Verwendung folgenden:

SELECT DISTINCT ID 
FROM `wp_posts` 
WHERE post_type = "community" 

// Returns: 
post_id 
4697 
4698 

Im Kurzen

Wie kann ich folgendes tun:

INSERT INTO `table` (`meta_id`, `post_id`, `meta_key`, `meta_value`) 
VALUES 
// foreach related distinct ID in wp_posts 
(NULL, 'ID', "_beds", "field_53bcfe244a98d"), 
(NULL, 'ID', "_beds_0_other", "field_53c2273053218"), 
(NULL, 'ID', "_beds_1_other", "field_53c2273053218") 
// end foreach 

** Temp Lösung **

Für Vorläufig habe ich einfach alle Daten mit PHP & in PHPMyAdmin hochgeladen. Könnte eine PHP-Schleife schreiben, die einfügt, aber ich suche nach einer MySQL-Lösung, die ich verwenden kann, ohne eine neue PHP-Datei (oder SQL) hochladen zu müssen.

$ids = array("4697", "4698"); 

echo ' 
INSERT INTO `table` (`meta_id`, `post_id`, `meta_value`, `meta_key`) 
VALUES<br />'; 
foreach ($ids as $id){ 
    echo ' 
(NULL, "'. $id .'", "1", "beds"), 
(NULL, "'. $id .'", "field_53bcfe244a98d", "_beds"), 
(NULL, "'. $id .'", "field_53c2273053218", "_beds_0_other"), 
<br />'; 

} 

Antwort

1

Der einfachste Weg wäre, die versteckten benutzerdefinierten Felder (führender Unterstrich) zusammen mit den Metawerten zu importieren. Wenn Sie nur die Daten aufräumen möchten, können Sie UNION SELECT als Eingabe für Ihre INSERT verwenden - Sie brauchen nicht die meta_id, es wird automatisch zugewiesen. Beachten Sie, dass diese SQL nicht prüft, ob die Daten bereits vorhanden sind, bevor Sie die Einfügung durchführen, also stellen Sie sicher, dass Sie nicht mit Duplikaten enden.

Sie können die post_id erhalten, die Sie benötigen, indem wp_postmeta für alle Einträge mit meta_key von „Betten“ abfragt.Mit dieser post_id können Sie die anderen Werte fest codieren und sie als Spalten in der SELECT-Anweisung, die dann für die Werte der INSERT verwendet wird.

-- modify the wp_ prefix as needed 
INSERT INTO `wp_postmeta` (`post_id`, `meta_key`, `meta_value`) 
-- get "_beds" key/value for all entries with meta key of "beds" 
SELECT post_id, '_beds' AS meta_key, 'field_53bcfe244a98d' AS meta_value 
FROM wp_postmeta WHERE meta_key = 'beds' 
UNION 
-- get "_beds_0_other" key/value for all entries with meta key of "beds" 
SELECT post_id, '_beds_0_other' AS meta_key, 'field_53c2273053218' AS meta_value 
FROM wp_postmeta WHERE meta_key = 'beds' 
UNION 
-- get "_beds_1_other" key/value for all entries with meta key of "beds" 
SELECT post_id, '_beds_1_other' AS meta_key, 'field_53c2273053218' AS meta_value 
FROM wp_postmeta WHERE meta_key = 'beds' 
-- order results (you can view what will be inserted if you run the SELECT without the INSERT) 
ORDER BY post_id 

Sie könnten auch ohne die UNION dies als drei verschiedene INSERT Anweisungen ausführen.