Ho 3 tabelle: tco_articles
, tco_module_eostext
e tco_articles_modules
. Il mio tco_articles
ha la chiave univoca id
. Uno per ogni articolo. Il mio tco_module_eostext
ha un instance_id
unico che appartiene a ciascun articolo. Il mio tco_articles_modules
contiene tutti gli article_id
s, ma ha 9 volte più instance_id
s che vengono utilizzati in altre tabelle.Collegamento di tabelle durante l'esecuzione di query in MySQL
così posso avere article_id
con instance_id
che quando si esegue una query nel tco_module_eostext
tornerà vuota.
Vorrei fare una query che restituirà il testo del corpo corretto per l'articolo corretto.
Finora ho:
global $wpdb;
$posts = array();
$ids = $wpdb->get_results('SELECT DISTINCT instance_id, article_id FROM tco_articles_modules', ARRAY_A);
Questo restituisce array con tutte le istanze e gli ID come:
Array
(
[0] => Array
(
[instance_id] => 928615
[article_id] => 129396
)
[1] => Array
(
[instance_id] => 928616
[article_id] => 129396
)
[2] => Array
(
[instance_id] => 928617
[article_id] => 129396
)
[3] => Array
(
[instance_id] => 928618
[article_id] => 129396
)
Si può vedere che le article_id
s sono gli stessi, ma instance_id
. Quando si mette
$wpdb->get_results('SELECT body FROM tco_module_eostext WHERE instance_id=928617 ', ARRAY_A);
È possibile ottenere vuoto, ma per
$wpdb->get_results('SELECT body FROM tco_module_eostext WHERE instance_id=928618 ', ARRAY_A);
Si potrebbe avere un po 'il corpo del testo.
Questo è il mio problema. Devo esaminarli tutti e filtrare quelli non vuoti e assegnare loro l'articolo corretto. Sono riuscito a uscita gli articoli
foreach ($ids as $key => $value) {
$instance_ID = $value['instance_id'];
$article_ID = $value['article_id'];
$article_out = $wpdb->get_results('SELECT * FROM tco_articles WHERE id='.$article_ID.' ', ARRAY_A);
$posts[$article_ID] = $article_out[0];
}
che restituisce qualcosa di simile:
Array
(
[129396] => Array
(
[id] => 129396
[headline] => Bla bla bla title
[intro] => This is cool article intro
[needs_review] => 0
[published] => 2014-12-16 09:17:00
[unpublished] =>
[hidden] => 0
[no_single_page] => 0
[permalink] => link-perma-link-here
[internal_slug] =>
[type_id] => 3
[thread_id] => 0
[news_id] => 0
[header_game_id] => 0
[puff_hh_id] => 0
[puff_title] =>
[hdrcol_id] => 900
[review_queued] =>
[lock_timeout] => 0
[created] => 2014-12-16 09:17:00
[updated] => 2015-01-16 13:51:30
[created_by] => 84142
[updated_by] => 84142
)
...
Ora vorrei aggiungere il testo body
dalla tabella tco_module_eostext
.
Esiste una query che posso utilizzare per eseguire questa operazione automaticamente o per eseguire questa operazione alla volta e quindi aggiungere l'array $posts
?
Il metodo di query di foreach è un po 'lento quando si hanno più di 180000 post.
Qualsiasi aiuto è apprezzato.
Quindi, 'tco_module_eostext' può avere più testo' body' poichè è possibile avere più 'instance_id' related. Se c'è più, quale vuoi ottenere? L'ultimo (by instance_id DESC)? –
Per ogni 'instance_id' nella tabella' tco_module_eostext' c'è un testo 'body' allegato (univoco per ogni id). Ma non ho un modo di scoprire a quale articolo questo testo appartiene, a meno che non vada attraverso 'tco_articles_modules', che contiene 9' instance_id's per 1 'article_id'. Solo uno da questo 9 è quello giusto, il resto è vuoto. 'article_id' è uguale a' id' nella tabella 'tco_articles'. –
Quindi, sei sicuro che ci sarà sempre una sola riga in 'tco_module_eostext' per (uno di) ogni 9' instance_ids'? –