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