PHP中按列的数据库映射

PHP中按列的数据库映射,php,mysql,database,relational-database,Php,Mysql,Database,Relational Database,我有一个数据库表列表,所有这些表都基于列名和字段值一起工作 我能够通过一个简单的主ID列字段值匹配得到大约3/4的表 对于我目前能够调出的表,我希望能够基于表之间可能的列匹配来检索其余的数据 我已经有了一个想法。。但我不太确定如何完成这个过程 这个网站正在使用WordPress,但理想情况下,这仍然可以通过纯PHP完成,而不需要使用WordPress数据库类 检索有关学校的所有信息: $school=$this->get_school('129020') 功能:($this->get_schoo

我有一个数据库表列表,所有这些表都基于列名和字段值一起工作

我能够通过一个简单的主ID列字段值匹配得到大约3/4的表

对于我目前能够调出的表,我希望能够基于表之间可能的列匹配来检索其余的数据

我已经有了一个想法。。但我不太确定如何完成这个过程

这个网站正在使用WordPress,但理想情况下,这仍然可以通过纯PHP完成,而不需要使用WordPress数据库类

检索有关学校的所有信息:
$school=$this->get_school('129020')

功能:
$this->get_school($id);

功能:
$this->map\u数据库($database\u table)

功能:
$this->search\u database\u tables($tables,$column\u name);

生成以下格式的数组:

$database_map = array(
    'table_name' => array(
        'row_number' => array(
            'field_key' => 'field_value'
        )
    )
);
我困惑的是下一步该怎么办?我该怎么做

我手头有所有的数据,但我不知道下一步该怎么办

这是我的想法,但肯定需要一些指导或投入

我想检查其他表列的值。例如,如果我正在查找一个辅助ID号,它只存在于其他一个表中,而这个表还没有被主ID号提取出来

表1可能有一列名为“Secondary”,字段值为“123”

我希望遍历所有其他数据库表,以查看是否存在列“Secondary”。如果是,则根据该列名的两个表字段值的匹配列名和字段值,从该表中提取所有字段

我确信我的代码是绝对可怕的,可能会大大简化。我已经寻找了一些现有的框架,它们可能已经达到了我想要的目标。我没有这么幸运找到任何东西


我愿意听取关于我的代码下一步去向的建议。我也欢迎任何我可以使用的现有框架。

你为什么要在PHP中而不是在mysql连接中这样做?你可以在mysql中设置一些外键,并查询信息\u schema DB,以在PHP中获得这些键定义,从而动态构建连接查询。。。问题是,你为什么要这么做?如果你曾经为了两个+不同的目的使用一个名称,这个系统就会崩溃-系统会很高兴地连接这两个+表,但其中一个+是错误的。
private function map_database($database_table = 'all'){
    global $wpdb;
    /* Get all of the database tables. */
    $tables = $wpdb->get_results('SHOW TABLES', ARRAY_N);
    $table_columns = array();
    foreach($tables as $table){
        if($database_table != 'all'){
            /* Filter tables by partial string matching the table name. */
            if(stripos($table[0], $database_table) === false){
                continue;
            }
        }
        /* Get all of the columns available in each database table. */
        $columns = $wpdb->get_results(
            "
            SELECT *
            FROM   information_schema.columns
            WHERE  table_name = '{$table[0]}'
            ORDER  BY ordinal_position  
            ",
            ARRAY_A
        );
        for($i = 0; $i < count($columns); $i++){
            $column = $columns[$i];
            /* Don't overwrite any data. Could result in missing or overlapping of data? */
            if(isset($table_columns[$table[0]]) && in_array($column['COLUMN_NAME'], $table_columns[$table[0]])){
                continue;
            }
            $table_columns[$table[0]][] = $column['COLUMN_NAME'];
        }
    }
    return $this->map_database_tables($tables, $table_columns);
}
/* 
$database_tables - Array consisting of strictly database tables. 
$database_consolidated - Nested array consisting of: table_name => table_columns
*/      
private function map_database_tables($database_tables, $database_consolidated){
    if(empty($database_tables) || empty($database_consolidated)){
        return;
    }
    $common_columns = array();

    foreach($database_consolidated as $table_name => $table_columns){
        for($i = 0; $i < count($table_columns); $i++){
            $table_column = $table_columns[$i];
            /* Find similar table columns in other database tables. */
            $search = $this->search_database_tables($database_consolidated, $table_column);
            if(!empty($search)){
                foreach($search as $column => $table){
                    $common_columns[$table_column]['shared_tables'] = $table;
                }
            }
        }
    }
    return $common_columns;
}
/* Returns column name and database tables sharing the column name. */
private function search_database_tables($tables, $column_name){
    $common_tables = array();
    foreach($tables as $table_name => $table_columns){
        if(in_array($column_name, $table_columns)){
            $common_tables[$column_name][] = $table_name;
        }
    }
    return $common_tables;
}
$database_map = array(
    'table_name' => array(
        'row_number' => array(
            'field_key' => 'field_value'
        )
    )
);