Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 填充SQL表的列_Php_Mysql_Sql - Fatal编程技术网

Php 填充SQL表的列

Php 填充SQL表的列,php,mysql,sql,Php,Mysql,Sql,我正在创建一个允许用户搜索大型数据库的应用程序。为了改进应用程序,我正在编写一个脚本,只将大型数据库的唯一值插入到一个新的、较小的数据库中,这将减少搜索时间 下面是我目前正在使用的PHP脚本。我使用的纯文本文件只包含每列的唯一值,每列有一个文件。我已经编写了一个脚本来将SQL列导出到文本文件中,所以我决定在这个概念验证中重用它。我使用类似的脚本生成一个包含列名的文件 $column_names = file_get_contents('./column_names'); $columns

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

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

位于./column\u names的文件是什么样子的?alter table tmp\u table添加唯一的名称、id、值?这里是否确实存在性能问题?数据库引擎可以极快地搜索索引正确的数据库。首先概述性能。完成此操作后,请考虑直接在SQL中创建表,而不是使用中间文本文件减慢速度。这看起来像是一个寻找问题的解决方案,而您解决问题的方法似乎过于复杂。@Bryan./column\u names是一个文本文件,其中包含每列的名称,然后是一个新行。@MikeW实际数据库大约有50000行和50列,在它的方向上执行中缀搜索需要大量时间。在不久的将来,我将直接在SQL中创建表,我只使用文本文件,因为我已经有了一个脚本来创建它们,我想让这个概念验证开始。