【问题标题】:php/mysql SHOW COLUMNS from table1 and table2php/mysql 显示来自 table1 和 table2 的列
【发布时间】:2012-08-09 09:48:30
【问题描述】:

谁能告诉我如何保存两个数据库表中的字段?

这适用于一张桌子:

$link = mysql_connect($host, $user, $pass) or die("Can not connect." . mysql_error());
mysql_select_db($db) or die("Can not connect.");

$result = mysql_query("SHOW COLUMNS FROM ".$table." WHERE Field NOT IN
('ID','Key','Text');");

$i = 0;
if (mysql_num_rows($result) > 0) {
    while ($row = mysql_fetch_assoc($result)) {
        $csv_output .= $row['Field']."; ";
        $i++;
    }
}
$csv_output .= "\n";`

我需要来自两个不同表的字段。我在同一台机器上有两个数据库。表中的字段名称不同。

这是工作:

$link = mysql_connect($host, $user, $pass) or die("Can not connect." . mysql_error());
mysql_select_db($db) or die("Can not connect.");
mysql_select_db($db2) or die("Can not connect.");

$result = mysql_query("SHOW COLUMNS FROM ".$table." , ".$table2."  WHERE Field NOT IN 
('ID','Key','Text');");

$i = 0;
if (mysql_num_rows($result) > 0) {
    while ($row = mysql_fetch_assoc($result)) {
        $csv_output .= $row['Field']."; ";
        $i++;
    }
}
$csv_output .= "\n";

字段“ID”、“Key”和“Text”仅存在于 DB1 上。

【问题讨论】:

    标签: php mysql multiple-columns


    【解决方案1】:

    您遇到的问题在于选择数据库。选择第一个数据库后,您会立即选择第二个数据库,这会覆盖前一个数据库,因此所选数据库是最后的第二个。
    一种解决方案是选择第一个数据库,获取您需要的列名,将它们保存在您的 $csv_output 中,然后选择第二个数据库,获取您需要的列并将它们附加到 $csv_output
    Usman提出的方案也不错,做法如下

    USE information_schema;  -- select the correct DB
    SELECT column_name FROM columns WHERE table_name IN ('table1', 'table2');
    

    希望有帮助!

    更新

    $link = mysql_connect($host, $user, $pass) or die("Can not connect." . mysql_error());
    
    // get the column name from the first DB
    mysql_select_db($db1, $link) or die("Can not connect to DB1.");
    $result = mysql_query("SHOW COLUMNS FROM ".$table." WHERE Field NOT IN
    ('ID','Key','Text')");    
    $i = 0;
    if (mysql_num_rows($result) > 0) {
        while ($row = mysql_fetch_assoc($result)) {
            $csv_output .= $row['Field']."; ";
            $i++;
        }
    }
    
    // get the column names from the second DB
    mysql_select_db($db2, $link) or die("Can not connect to DB2.");
    $result = mysql_query("SHOW COLUMNS FROM ".$table." WHERE 1");
    $i = 0;
    if (mysql_num_rows($result) > 0) {
        while ($row = mysql_fetch_assoc($result)) {
            $csv_output .= $row['Field']."; ";
            $i++;
        }
    }
    $csv_output .= "\n";
    

    【讨论】:

    • 让它在 mysql 上工作> :) 现在我尝试开始处理我蹩脚的 php 脚本。 php不是我的专业领域......
    • 第一种还是第二种解决方案?
    • 您对 db-connections 的看法
    • 我已经通过稍微修改您的代码更新了我的答案;)
    • 不错!确实不错! csv 现在通过 apache 打开。某些列在 csv 文件上的顺序错误,但这没什么大不了的。谢谢!
    【解决方案2】:

    将您的查询更改为:

    $result = mysql_query("SELECT column_name FROM information_schema WHERE table_name IN ('".$table."','".$table2."' WHERE column_name NOT IN ('ID','Key','Text');");
    

    【讨论】:

    • 嗯..不工作。我的脚本在 apache 上运行,即。进入页面时,php-script 生成 csv 文件,可以保存或直接打开。修改后没有任何反应。
    • 两个数据库是否相同?我的意思是,每个数据库中都有表吗?
    • 没有。数据库不相同。在 Db1 上有 10 个字段,在 DB2 上有 13 个字段。两个数据库上都存在一个字段“T_ID”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-12
    • 2017-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多