我试图在使用BEFORE的另一列之前向我的表添加一列,我不能使用AFTER,因为之前的列名不是常量.这就是我所拥有的:
ALTER TABLE testfyf ADD intake_10_2013 VARCHAR(20) NOT NULL BEFORE url;
直到BEFORE之前的所有事情都在发挥作用.
在有人对此发表任何言论之前,我知道以这种方式添加专栏并不是一个好主意,但这是我老板想要的.
有谁知道我怎么能做到这一点?我发现很多例子说这应该有效,但事实并非如此.
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)