是否无法在另一列之前专门添加sql中的列?

Bee*_*Bee 3 php mysql

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

ALTER TABLE testfyf ADD intake_10_2013 VARCHAR(20) NOT NULL BEFORE url;

直到BEFORE之前的所有事情都在发挥作用.

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

有谁知道我怎么能做到这一点?我发现很多例子说这应该有效,但事实并非如此.

Mic*_*ski 5

MySQL(如果这是mysql - 你只是标记它sql一般)不支持BEFORE关键字.您必须找出上一列的名称并添加它AFTER.

您可以使用此语句列出列名称,并使用PHP以编程方式确定应该放置新的列名称.

SHOW COLUMNS FROM tablename;
Run Code Online (Sandbox Code Playgroud)

这是一个应该在'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'];
  }
}
Run Code Online (Sandbox Code Playgroud)

现在你可以这样做:

$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();
Run Code Online (Sandbox Code Playgroud)