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