当从MySQL中选择所有内容时,我可以重命名特定字段,并仍然选择其他所有内容。

时间:2011-05-19 23:50:30

标签: php mysql csv into-outfile

嘿,伙计们。所以,我试图找出如何在mysql数据库中的多个表中选择每个字段,并将结果表输出到Excel的.csv文件。我找到了臭名昭着的stackoverflow问题,处理.csv ouput,并在那里有所有的代码。所以,我想我要问的是:

有没有办法做一个看起来像这样的mysql查询?

SELECT * prof.id AS youth_id FROM time time, profiles prof, WHERE foo='bar'

让它从两个(或类似4个)表中选择所有内容,但选择id为youth_id,或者如果我需要选择某些值作为另一个名称,是否必须指定我想要的值?

我希望不必指定每个字段,因为我有50+输出。

我试过搜索但却找不到我需要的东西。我猜你是否可以指出我的方向很好。

4 个答案:

答案 0 :(得分:13)

您不必指定每个字段。相反,您可以执行以下操作:

SELECT *, prof.id AS youth_id FROM time time, profiles prof

但是,上面的内容将返回两个表中的所有列以及重命名的列。因此,如果原始的两个表总共有4列,并且您重命名一个,那么结果集中将得到5列。

答案 1 :(得分:0)

瑞恩,你可以做你想做的事。唯一的问题是,结果将包括youth_id和id,每个都具有相同的值。如果你只想要youth_id&不是id,那么你必须列出你想要的所有列而不是'*'。顺便说一句,如果你有phpmyadmin方便,你可以输入sql并立即看到结果。

答案 2 :(得分:0)

好吧,因为没有其他解决方案看起来很完美,我会在盒子外面思考一下。如果你不介意打两个电话。一个可以是表模式(存储列名称),然后您可以根据需要以编程方式更改名称(无需全部键入)。之后,使用内爆数组作为SELECT部分​​进行第二次调用。

一个例子:

<?php
$tables = array ('table1','table2','table3');
$NameAliases = array('table1.id'=>'profid');

foreach ($tables as $table)
{
    $sql = "SHOW COLUMNS FROM $table;";
    $result = mysql_query($sql);

    $columns = array();

    while ($row = mysql_fetch_array($result))
    {
        $search = array_search($table.'.'.$row["Field"],$NameAliases);
        if ($search === true)
        {
            $parts = explode('.',$NameAliases[$search]);
            $columns[] = "$table.{$row["Field"]} AS {$parts[1]}"; //get the side of the dot
        }
        else
        {
            $columns[] = "$table.{$row["Field"]}";
        }
    }
}
$columnstring = implode(', ',$columns);
$sql = "SELECT $columnstring FROM ".implode(', ',$tables)." WHERE 1=1";
$result = mysql_query($sql);

while ($row = mysql_fetch_array($result))
{

}
?>

(如果上述情况完全没有任何线索)

答案 3 :(得分:0)

如果你真的不想从

那个列重复(即同时获得id和youth_id)
SELECT *, prof.id AS youth_id 
FROM time 
INNER JOIN profiles prof 
   ON time.profile_id = prof.id 
WHERE foo = 'bar'

除了包含您想要别名的列的表格之外,您可以从每个表格中SELECT *

SELECT time.*, prof.id AS youth_id, prof.forename, prof.surname 
FROM time 
INNER JOIN profiles prof 
   ON time.profile_id = prof.id 
WHERE foo = 'bar'

这将从时间中获取所有列,并从配置文件中获取枚举的列。您仍然需要枚举您要查找的列中所有列的所有列,但至少您不必列出每一列。

当然,还有一个论点,即如果你的架构在某个时刻发生了变化,你应该枚举所有列,但这是另一个故事。