选择具有相同字段名的MYSQL行并添加前缀

选择具有相同字段名的MYSQL行并添加前缀,mysql,Mysql,我试图通过mysql查询选择几个表并左键连接它们,但是它们都有相同的列名称“user”等。我想用这种方式重命名所有字段。因此,我尝试了以下查询 SELECT mod_backup_accounts . * AS account . * , mod_backup_subscriptions . * FROM `mod_backup_accounts` LEFT JOIN `mod_backup_subscriptions` ON `mod_backup_accounts`.subscription

我试图通过mysql查询选择几个表并左键连接它们,但是它们都有相同的列名称“user”等。我想用这种方式重命名所有字段。因此,我尝试了以下查询

SELECT mod_backup_accounts . * AS account . * , mod_backup_subscriptions . *
FROM `mod_backup_accounts`
LEFT JOIN `mod_backup_subscriptions` ON `mod_backup_accounts`.subscription_id = `mod_backup_subscriptions`.package_id

但是,
mod_backup_账户。*作为帐户*使它失败,有没有办法做到这一点?因此,它将名称作为帐户。

您不能为别名列提供速记,必须为每个列名称显式提供速记。总之,通常建议在
SELECT
列表中显式地命名所有列,而不是使用
SELECT*
,因为它允许您确定地指定列顺序,并防止您在以后将一个大BLOB添加到表中时意外地拉入一个大BLOB(或任何其他模式更改)


我完全理解你关于重复字段名的问题

我也需要它,直到我编写了自己的函数来解决它。如果你使用PHP,你可以使用它,或者如果你有以下这些工具,用你正在使用的语言来编写你的代码

这里的诀窍是
mysql\u field\u table()
返回表名,
mysql\u field\u name()

您还可以修改该函数,以便在字段名重复时仅添加“column.”前缀

问候,

function mysql_rows_with_columns($query) {
    $result = mysql_query($query);
    if (!$result) return false; // mysql_error() could be used outside
    $fields = mysql_num_fields($result);
    $rows = array();
    while ($row = mysql_fetch_row($result)) { 
        $newRow = array();
        for ($i=0; $i<$fields; $i++) {
            $table = mysql_field_table($result, $i);
            $name = mysql_field_name($result, $i);
            $newRow[$table . "." . $name] = $row[$i];
        }
        $rows[] = $newRow;
    }
    mysql_free_result($result);
    return $rows;
}
函数mysql\u行\u和列($query){
$result=mysql\u query($query);
if(!$result)返回false;//mysql\u error()可以在外部使用
$fields=mysql\u num\u字段($result);
$rows=array();
而($row=mysql\u fetch\u row($result)){
$newRow=array();

对于($i=0;$i)其他方式?因为这需要大量的SQL@SauliusAntanavicius不,没有语法速记。努力…哈哈,已经有14行SQL了!但是比通过[14]等等访问行要好,错误的可能性太多了
function mysql_rows_with_columns($query) {
    $result = mysql_query($query);
    if (!$result) return false; // mysql_error() could be used outside
    $fields = mysql_num_fields($result);
    $rows = array();
    while ($row = mysql_fetch_row($result)) { 
        $newRow = array();
        for ($i=0; $i<$fields; $i++) {
            $table = mysql_field_table($result, $i);
            $name = mysql_field_name($result, $i);
            $newRow[$table . "." . $name] = $row[$i];
        }
        $rows[] = $newRow;
    }
    mysql_free_result($result);
    return $rows;
}