Php 填充SQL表的列
我正在创建一个允许用户搜索大型数据库的应用程序。为了改进应用程序,我正在编写一个脚本,只将大型数据库的唯一值插入到一个新的、较小的数据库中,这将减少搜索时间 下面是我目前正在使用的PHP脚本。我使用的纯文本文件只包含每列的唯一值,每列有一个文件。我已经编写了一个脚本来将SQL列导出到文本文件中,所以我决定在这个概念验证中重用它。我使用类似的脚本生成一个包含列名的文件Php 填充SQL表的列,php,mysql,sql,Php,Mysql,Sql,我正在创建一个允许用户搜索大型数据库的应用程序。为了改进应用程序,我正在编写一个脚本,只将大型数据库的唯一值插入到一个新的、较小的数据库中,这将减少搜索时间 下面是我目前正在使用的PHP脚本。我使用的纯文本文件只包含每列的唯一值,每列有一个文件。我已经编写了一个脚本来将SQL列导出到文本文件中,所以我决定在这个概念验证中重用它。我使用类似的脚本生成一个包含列名的文件 $column_names = file_get_contents('./column_names'); $columns
$column_names = file_get_contents('./column_names');
$columns = explode("\n", $column_names);
foreach($columns as $column_name){
if($column_name != ""){
// Get the text file with unique values from a column
$data_file = file_get_contents('./data/' . $column_name);
// Add a new column to the database
mysql_query("ALTER TABLE test_db.$tmp_table ADD $column_name varchar (60)");
// For each value from the file, insert that value into the database
foreach (explode("\n", $data_file) as $data) {
// Skip blank values and the initial meta-data
if(($data != "") && ($data != $column_name)) {
mysql_query("INSERT INTO test_db.tmp_table (" . $column_name . ")
VALUES (" . $data . ")");
}
}
}
}
这段代码生成一个新的数据库,它看起来类似于
+--------+------+-------+
| Name | ID | Value |
+--------+------+-------+
| James | NULL | NULL |
| Jim | NULL | NULL |
| NULL | 1 | NULL |
| NULL | 2 | NULL |
| NULL | 3 | NULL |
| NULL | NULL | 42 |
+--------+------+-------+
我的目标是使这些列彼此独立,以便使用下面的PHP脚本对每一列上的值执行中缀搜索
$columns = mysql_query("SHOW columns FROM test_db.tmp_table");
// Value to be searched, from HTML
$id = $_GET['id'];
if($id != ""){
while ($col = mysql_fetch_array($columns))
{
$col[0];
// Print the result
print_r(
mysql_fetch_array(
mysql_query("SELECT `$col[0]`
FROM test_db.tmp_table
WHERE `$col[0]`
LIKE '%$id%'
LIMIT 0, 100")));
}
}
我希望生成一个类似下表的表,以便使用上面的查询进行搜索
+--------+------+-------+
| Name | ID | Value |
+--------+------+-------+
| James | 1 | 42 |
| Jim | 2 | NULL |
| NULL | 3 | NULL |
+--------+------+-------+
我应该如何创建一个列独立的中间数据库,类似于上表?我担心我可能会以错误的方式处理搜索大型数据库的问题。
感谢您抽出时间阅读所有这些
tl;dr我如何才能创建一个看起来像第二个表而不是第一个表的数据库。位于./column\u names的文件是什么样子的?alter table tmp\u table添加唯一的名称、id、值?这里是否确实存在性能问题?数据库引擎可以极快地搜索索引正确的数据库。首先概述性能。完成此操作后,请考虑直接在SQL中创建表,而不是使用中间文本文件减慢速度。这看起来像是一个寻找问题的解决方案,而您解决问题的方法似乎过于复杂。@Bryan./column\u names是一个文本文件,其中包含每列的名称,然后是一个新行。@MikeW实际数据库大约有50000行和50列,在它的方向上执行中缀搜索需要大量时间。在不久的将来,我将直接在SQL中创建表,我只使用文本文件,因为我已经有了一个脚本来创建它们,我想让这个概念验证开始。