2012-10-08 2 views
1

Я тяну колонку в существующем скрипте в свои файлы шаблонов, и все работает отлично.SQL-запрос: не удается заказать столбец под названием «заказ»?

Единственная проблема заключается в том, что этот скрипт имеет столбец с именем order, и каждая строка имеет номер в этом столбце, чтобы показать, что должно быть сверху. Если я задал свой запрос на «ORDER BY name», например, все работает нормально, но когда я использую «ORDER BY order», я получаю ошибку SQL.
Могу ли я иметь колонку под названием order? Я не могу изменить имя столбца, потому что это часть скрипта.

Есть ли способ вокруг него?

Это линия в моем SQL запрос:

SELECT * FROM categories WHERE hide = 0 ORDER BY order 
+1

Попробуйте использовать идентификатор таблицы (categories.order). Вы не указываете, какие СУБД вы используете, но, вероятно, это связано с тем, что есть зарезервированные слова, которые нельзя использовать. – Alfabravo

+0

Какой механизм базы данных вы используете? Alfabravo почти наверняка верен, но способ цитирования зарезервированного слова отличается в MySQL (backticks), SQL Server (скобки), Oracle (двойные кавычки) и т. Д. – Pondlife

ответ

5

order - ключевое слово в SQL. Так что если вы хотите использовать ключевое слово в качестве имени, используйте кавычку символы вокруг него:

SELECT * FROM categories WHERE hide = 0 ORDER BY `order` 

Попробуйте это :)

+0

FYI: Это также относится к любым ключевым словам. Например. если у вас есть столбец с именем «select» (который также является ключевым словом), вы также можете использовать обратные ссылки для этого. – Jamesking56

+1

СПАСИБО! ты мой герой!!! – Debrah

+0

Рад, что я мог помочь :) – Jamesking56

0

Попробуйте использовать кавычку:

SELECT * FROM `categories` WHERE `hide` = 0 ORDER BY `order` 

ORDER является зарезервированным словом в SQL. Вы можете использовать зарезервированное слово в качестве имени столбца, но при обращении к нему вы должны окружать его в обратном направлении. Хорошая практика заключается в том, чтобы окружать все имена столбцов в обратных тактах, чтобы вы не столкнулись с этой проблемой.

0

Попробуйте использовать назад клещ вокруг имени столбца, который должен сделать это.

0

От manual:

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

Таким образом, вы можете использовать его как это:

SELECT * FROM categories WHERE hide = 0 ORDER BY `order` 
+1

Откуда вы знаете, что OP использует MySQL? – Pondlife

0

AS order является SQL ключевых слов, вы должны избежать ее должным образом в качестве идентификатора поля, используя обратные кавычки:

SELECT ... FROM ... ORDER by `order` 
0

Работал меня с скобками. SELECT T. * FROM dbo.test AS T ORDER BY [T]. [ORDER]

Смежные вопросы