-2

我在 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

4 回答 4

3

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

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

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

通过使用 的“裸”列名order,您会混淆 SQL 解析器,因为order它是一个保留字。


(a):当然,如果您停止使用保留字作为列名,这个问题就会消失,但我认为您这样做是有原因的(例如,程序的桶负载已经取决于该列被调用的事实order)。

我自己,我倾向于不对列使用通用名称(例如orderor date),而是更喜欢与语言不冲突的东西(例如order_numor start_date)。这样我就不用担心逃跑了。

于 2012-10-06T08:24:27.870 回答
1

您正在使用 SQL 保留关键字order作为列名,所以使用反引号来转义......就像这样

SELECT * FROM learningmaterial ORDER BY `order` ASC

我建议您更改列名称

保留关键字列表参考

于 2012-10-06T08:26:10.167 回答
1

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

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

在第二种情况下

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

这没有任何意义。

于 2012-10-06T08:28:42.023 回答
1

Since Order is a reserved word, you need to wrap them using backticks not single quotes.

SELECT * FROM `learningmaterial` ORDER BY `order` ASC
于 2012-10-06T08:31:46.303 回答