0

我想创建一个表,其名称类似于:

name_thisyear_thisweekofyear,例如 -> name_2009_40

我试过这个查询:

如果不存在则创建表 name_YEAR(NOW())_WEEKOFYEAR(NOW())(id int NOT NULL AUTO_INCREMENT PRIMARY KEY, phone_no int, created datetime, deleted datetime)

它不起作用。请帮忙

错误信息:

#1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 'NOW())_WEEKOFYEAR(NOW())(id int NOT NULL AUTO_INCREMENT PRIMARY KEY, userid int,' 附近使用正确的语法

4

3 回答 3

3

你不能那样做......你必须指定表名,一个函数不能在那里执行

标识符可以被引用或不被引用。如果标识符包含特殊字符或者是保留字,则在引用它时必须引用它。当前字符集中的字母数字字符集“_”和“$”并不特殊。

于 2009-08-19T09:09:42.733 回答
1

这是行不通的,因为表名中不允许使用括号(除非您使用反引号正确转义它们)

mysql 将您的查询视为:

CREATE TABLE IF NOT EXISTS
name_YEAR(
    NOW()      # this is causing an error already
)
/*GARBAGE: */_WEEKOFYEAR(NOW())(id int NOT NULL AUTO_INCREMENT PRIMARY KEY, phone_no int, created datetime, deleted datetime)

我不知道是否有可能动态地创建表名的一部分并最终将这些部分连接在一起。

简单的方法是在 php 中计算名称并从 php 中创建查询

于 2009-08-19T09:10:45.570 回答
0

你不能那样做。表名和列名必须作为标识符给出。

PS:要在别处连接,请使用 concat()。

于 2009-08-19T09:12:55.660 回答