填充SQL表的列

时间:2014-02-11 03:05:41

标签: php mysql sql

我正在创建一个允许用户搜索大型数据库的应用程序。为了改进应用程序,我正在编写一个脚本,该脚本只将大型数据库的唯一值插入到一个新的较小的数据库中,这将花费较少的时间进行搜索。

这是我目前正在使用的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如何创建一个看起来像第二个表的数据库,而不是第一个。

0 个答案:

没有答案