过滤表并删除空表

时间:2015-12-18 13:16:04

标签: php mysql sql wordpress migration

我有来自不同数据库的几个表,我需要将其转换为wordpress可以使用的内容。

问题在于这些表格非常紧密。所以我在文章表中有文章ID,但文章文本在一个单独的表中。这两个连接的是一个包含外部article_id密钥的表和一个名为instance_id的外部主键。整件事看起来像这样:

enter image description here

文章信息位于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查询中放了什么,我得到了一堆空数组和一些被填充的数组。

我想:

  1. 在查询中删除空的

  2. 有效地查询整个事物(连接到文章的每个表格)并制作一系列帖子,然后我可以使用wp_insert_post

  3. 我不是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

0 个答案:

没有答案