Php 在sql中是否不可能在另一列之前添加一列?

Php 在sql中是否不可能在另一列之前添加一列?,php,mysql,Php,Mysql,我试图在使用before的另一列之前向表中添加一列,但不能使用AFTER,因为before的列名不是常量。这就是我所拥有的: ALTER TABLE testfyf ADD ADD ADTAIN_10_2013 VARCHAR(20)在url之前不为空 到目前为止,一切正常 在任何人对此发表意见之前,我知道以这种方式添加专栏不是一个好主意,但这正是我老板想要的 有人知道我怎样才能做到这一点吗?我发现很多例子都说这应该行得通,但事实并非如此。MySQL(如果这是MySQL-您只是一般地将其标记为s

我试图在使用before的另一列之前向表中添加一列,但不能使用AFTER,因为before的列名不是常量。这就是我所拥有的:

ALTER TABLE testfyf ADD ADD ADTAIN_10_2013 VARCHAR(20)在url之前不为空

到目前为止,一切正常

在任何人对此发表意见之前,我知道以这种方式添加专栏不是一个好主意,但这正是我老板想要的

有人知道我怎样才能做到这一点吗?我发现很多例子都说这应该行得通,但事实并非如此。

MySQL(如果这是MySQL-您只是一般地将其标记为
sql
)不支持
BEFORE
关键字。您必须找出上一列的名称,并将其添加到
之后的

您可以使用此语句列出列名,并使用PHP以编程方式确定新列名应放在哪个列名之后

SHOW COLUMNS FROM tablename;
这里有一个函数,它应该返回“url”之前的列。我没有测试它,但我认为它会成功的

// Queries the table column information and returns the column name just before `url`
function get_column_before_url() {
  $result = mysql_query("SHOW COLUMNS FROM testfyf");
  while ($row = mysql_fetch_array($result)) {
    if ($row['Field'] == "url") {
      // you should clean up your mysql resources before returning
      mysql_free_result($result);
      return $lastcol;
    }
    // Store the column name to return if the next one turns out to be `url`
    else $lastcol = $row['Field'];
  }
}
现在您可以执行以下操作:

$column_before = get_column_before_url();
$sql = "ALTER TABLE testfyf ADD intake_10_2013 VARCHAR(20) NOT NULL AFTER $column_before;";
$result = mysql_query($sql);
if (!$result) echo $mysql_error();

您可以使用
信息\u模式
按顺序获取表中的列:

SELECT c.COLUMN_NAME
     , @n := @n + 1 AS column_id
FROM
    ( SELECT COLUMN_NAME
      FROM information_schema.columns
      WHERE TABLE_SCHEMA = 'yourDatabase'
        AND TABLE_NAME = 'yourTable'
    ) AS c
  CROSS JOIN
    ( SELECT @n := 0 ) AS v

如果将上述内容加入到自身中,则可以获取上一列的名称,并使用
addcolumn
AFTER

得到什么错误?您使用什么RDBMS?MsSQL?我知道这在中国很管用MySQL@IAbstractafaik在MySQL中不起作用。
之后的
关键字可以,但在
之前没有等效的
。@ajreal的可能重复项不是重复项,而是类似项。在本例中,
FIRST
关键字不是该问题的选项。事实上,这里有更多信息:ALTER TABLE Syntax-是的,很抱歉,它是MySQL。但是,我不能使用AFTER,因为正如我所说,前面的列不是一个常数。@Bee阅读了我的其余答案。一旦你列出了这些列并确定哪一列正好位于
url
列之前,你就可以使用
之后的
。@Bee我刚刚为你添加了一个函数来查找列名。哇,我想我的脑子有点崩溃了。我绝对是个新手。我必须试着让它工作起来。这将使它成为第一栏。不是
URL
@Brendan:对。误解了问题。用不同的方法更新。