查询语法错误

时间:2012-10-06 08:23:32

标签: php mysql

我在mysql SELECT查询中使用ORDER BY,但我不知道ots没有订购数据..如果我使用此查询显示表但不按升序排序数据

$result = mysql_query("SELECT *FROM learningmaterial ORDER BY 'order' ASC")or   die(mysql_error()); 

但如果我使用

$result = mysql_query("SELECT *FROM learningmaterial ORDER BY order ASC")or die(mysql_error()); 

然后它给出错误,查询的语法不正确...我已经在各种网站上看到但我找不到我的代码中的任何独特...我认为它的权利,...请检查查询并修复一个解决方案。提前谢谢:)

4 个答案:

答案 0 :(得分:3)

你需要反引号,而不是单引号(a)

... SELECT * FROM learningmaterial ORDER BY `order` ASC ...

通过使用单引号,您可以通过常量对行进行排序(每行获得相同的常量),因此实际上根本不对它们进行排序。

通过使用“{1}}的”裸“列名称,您会混淆SQL解析器,因为order是保留字。


(a):当然,如果你停止使用保留字作为列名,这个问题就会消失但是我认为你出于某种原因(例如程序的桶加载已经取决于列被称为order)的事实。

我自己,我倾向于不为列使用通用名称(例如orderorder),而是选择与语言不冲突的内容(例如dateorder_num)。这样我就不用担心逃跑了。

答案 1 :(得分:1)

您正在使用SQL保留关键字order作为列名,因此请使用反向标记来逃避...像这样

SELECT * FROM learningmaterial ORDER BY `order` ASC

我建议您更改列名

Reserved Keywords

列表参考

答案 2 :(得分:1)

ORDER是一个保留的sql语法关键字。你不能直接使用它

SELECT *FROM learningmaterial ORDER BY `order` ASC
-------------------------------^---------

在第二种情况下

SELECT *FROM learningmaterial ORDER BY order ASC
---------------------------------^-------^--
//this is a sql error

没有任何意义。

答案 3 :(得分:1)

由于Order是保留字,因此需要使用反引号而不是单引号来包装它们。

SELECT * FROM `learningmaterial` ORDER BY `order` ASC