2014-07-14 9 views
5

Alcuni storia indietro (non direttamente pertinenti alla mia domanda, ma forse qualcun altro può utilizzare il mio metodo)Inserire valori statici multipli per più ID variabili

sto lavorando in WordPress v3.9.1 utilizzando il plugin avanzata Campi personalizzati. Ho importato un file CSV di valori personalizzati (utilizzando il plug-in WP Ultimate CSV Importer, versione gratuita) dal vecchio database formattato come necessario in WordPress con un'eccezione: Campi ripetitore ACF. Il plugin è ottimo, ma non esiste ancora un buon metodo per importare un sacco di dati.

campi ripetitori vengono memorizzati nel database come segue:

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 

che è; per ogni post_id c'è un campo Repeater chiamato "beds". "In" il campo del ripetitore è 1 campo, ripetuto due volte. Ogni campo ha 2 voci di database: un riferimento di campo (utilizzato per gestire i campi di salvataggio, sempre lo stesso per campo) e un valore. Non è intuitivo come potrebbe essere, ma è progettato attorno al sistema di tabelle di default di WordPress.

domanda effettiva

In questo momento, ho campi importati dal mio vecchio database che assomigliano a questo:

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 

ho bisogno di aggiungere

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 e meta_value sono statico - non cambiano mai (dopo che il campo è stato creato mantiene lo stesso campo _ ## fino alla cancellazione). meta_id è l'incremento automatico.

Il problema è che ho 200+ valori post_id, ognuno dei quali ha bisogno di 50 voci statiche - non volendo il codice. Posso selezionare gli ID richiesti utilizzando il seguente:

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

// Returns: 
post_id 
4697 
4698 

In breve

Come posso effettuare le seguenti operazioni:

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 

** ** soluzione temporanea

Per Al momento, ho scaricato tutti i dati usando PHP & caricandolo in PHPMyAdmin. Potrebbe scrivere un loop PHP che si inserisce, ma sto cercando una soluzione MySQL che possa essere utilizzata senza dover caricare un nuovo file php (o sql).

$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 />'; 

} 

risposta

1

Il modo più semplice per farlo sarebbe stato per importare i campi personalizzati nascosti (leader di sottolineatura) insieme con i valori di meta. Se vuoi semplicemente pulire i dati puoi usare un UNION SELECT come input per il tuo INSERT - non hai bisogno dello meta_id, sarà assegnato automaticamente. Nota che questo SQL non controllerà per vedere se i dati esistono già prima di inserire le cose, quindi assicurati di non finire con i duplicati.

È possibile ottenere il post_id di cui si ha bisogno interrogando wp_postmeta per tutte le voci con meta_key di "letti".Usando questo post_id puoi codificare gli altri valori e inserirli come colonne nell'istruzione SELECT, che viene quindi utilizzata per i valori dello INSERT.

-- 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 

Si può anche eseguire questo come tre diversi INSERT dichiarazioni senza l'UNION.