我正在创建一个允许用户搜索大型数据库的应用程序。为了改进应用程序,我正在编写一个脚本,该脚本只将大型数据库的唯一值插入到一个新的较小的数据库中,这将花费较少的时间进行搜索。
这是我目前正在使用的PHP脚本。我使用的纯文本文件只包含每列中的唯一值,一个文件代表每列。我已经编写了一个脚本来将SQL列导出到文本文件中,因此我决定将其重用于此概念验证。我使用类似的脚本生成包含列名的文件。
$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如何创建一个看起来像第二个表的数据库,而不是第一个。