我有来自不同数据库的几个表,我需要将其转换为wordpress可以使用的内容。
问题在于这些表格非常紧密。所以我在文章表中有文章ID,但文章文本在一个单独的表中。这两个连接的是一个包含外部article_id
密钥的表和一个名为instance_id
的外部主键。整件事看起来像这样:
文章信息位于tco_articles
,文字位于tco_module_eostext
。
主要问题是tco_article_modules
中有~180000 instance_id
个键。每个article_id
都有9个不同的instance_id
分配给它(不知道为什么)。
所以我做的是:
global $wpdb;
$posts = array();
$byline = array();
$article_id = $wpdb->get_results('SELECT DISTINCT id FROM tco_articles', OBJECT_K);
$instance_id = $wpdb->get_results('SELECT DISTINCT instance_id FROM tco_articles_modules', ARRAY_A);
如果我做print_r($instance_id);
,我会得到类似
Array
(
[0] => Array
(
[instance_id] => 928615
)
[1] => Array
(
[instance_id] => 928616
)...
这给出了~21000 $article_id
s和~180000 instance_id
s。如果我去手动查看与instance_id
相关的表格中我将获得的tco_articles_modules
内容,例如:
$wpdb->get_results('SELECT * FROM tco_module_byline WHERE instance_id=123456', ARRAY_A);
我把虚拟键123455放在哪里只是为了说明。结果我得到空数组。但如果我选择另一把钥匙,我可以在里面找些东西。我无法知道instance_id
我将在某个表格中填充一行。
所以我的想法是用instance_id
遍历每个foreach
,然后搜索每个表,如果它们不是空的,我会得到一些我可以使用的东西。所以我试过了:
foreach ($instance_id as $key => $value) {
$single_id = $value['instance_id'];
$byline_out = $wpdb->get_results( "SELECT * FROM tco_module_byline WHERE instance_id='.$single_id.' IS NOT NULL ", OBJECT_K);
$byline[] = $byline_out;
}
我一无所获。如果我删除IS NOT NULL
我要么得到空数组,有一次,我忘记了我在sql查询中放了什么,我得到了一堆空数组和一些被填充的数组。
我想:
在查询中删除空的
有效地查询整个事物(连接到文章的每个表格)并制作一系列帖子,然后我可以使用wp_insert_post
我不是sql和查询的专家,但从我读过的内容来看,如果我的表格结构正确,这应该不是问题。然而,这个东西是如此严重的互联,我找不到一个简单的方法来获取我需要的所有数据。 :\对180000键执行foreach似乎是一种查询数据的可怕方式。
所以,如果有人有任何帮助或建议,我会很感激。
修改
所以我想限制我的foreach只通过几把钥匙而且我这样做了:
$i=0;
foreach ($instance_id as $key => $value) {
$single_id = $value['instance_id'];
$byline_out = $wpdb->get_results( "SELECT * FROM tco_module_byline WHERE instance_id='.$single_id.' IS NOT NULL", OBJECT_K);
$byline[] = $byline_out;
if (++$i == 1) break;
}
我从byline table得到填充值的结果:
Array
(
[0] => Array
(
[1086742] => stdClass Object
(
[instance_id] => 1086742
[show_name] => 0
[meta] =>
)
[1086789] => stdClass Object
(
[instance_id] => 1086789
[show_name] => 0
[meta] =>
)...
我认为我的foreach是错误的。但我不确定如何:S