2009-08-19 3 views
0

Я хочу, чтобы создать таблицу, в которой название что-то вроде:Mysql создает проблемы с запросом таблицы?

name_thisyear_thisweekofyear, например -> name_2009_40

Я попробовал этот запрос:

CREATE TABLE IF NOT EXISTS name_YEAR (NOW()) _ WEEKOFYEAR (NOW()) (id int NOT NULL AUTO_INCREMENT PRIMARY KEY, phone_no int, дата создания, дата и время)

Это не работает. Пожалуйста, помогите

Сообщение об ошибке:

# 1064 - у Вас есть ошибка в вашем SQL синтаксиса; проверьте руководство, которое соответствует версии сервера MySQL для правильного синтаксиса, чтобы использовать рядом с 'NOW()) _ WEEKOFYEAR (NOW()) (ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY, идентификатор INT' в строке 1

+0

это может помочь, если вы отправили сообщения об ошибках, которые вы получаете – Glen

ответ

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

+0

Я пробовал обратную косую черту, не могу работать. Как это сделать? tbale name "name_year_week"? – 2009-08-19 09:12:52

+1

создайте имя таблицы на другом языке! – knittl

+0

@knittl: это единственный способ? – 2009-08-19 09:34:12

3

Вы не можете этого сделать ... Вы должны указать имя таблицы, функция не может быть выполнена там

Идентификатор может быть процитирован или неуказан. Если идентификатор содержит специальные символы или зарезервированное слово, вы должен цитировать его всякий раз, когда вы ссылаетесь на него. Набор буквенно-цифровых символов из текущего набора символов «_» и «$» не является особым.

+0

, так, как создать таблицу с этим именем? name_'year '_' неделя '?? – 2009-08-19 09:12:16

+2

Как сказал knittl, сгенерируйте имя на используемом вами языке и передайте его в mysql ... –

+0

Это единственный способ? – 2009-08-19 09:21:07

0

Вы не можете сделать это. Названия таблиц и столбцов должны быть указаны как indentifier.

PS: Чтобы объединиться в другом месте, используйте concat().

+1

не совсем корректно, имена таблиц должны быть обязательно указаны цитатами (\ '), а не кавычками ("), как строки, но да, они должны быть фиксированным текстом – knittl