-2

我遇到了一个奇怪的问题。每当我向数据库添加一个新条目时,它都会给它一个更高的 id 编号,但不知何故将它视为一个较低的编号并将其置于旧条目之下。

在 PHP 中排序时DESC,我也得到了这个命令,有人知道这里出了什么问题吗?

$res = mysql_query("SELECT * FROM data ORDER BY 'id' DESC");用来对它们进行排序,它给出的顺序与图片中的相同。(不知道为什么我在这里被否决但是好的..)

图片: 在此处输入图像描述

4

4 回答 4

2

您的查询是:

SELECT * FROM data ORDER BY 'id' DESC

您正在按string 'id'排序,请注意不在引号内时突出显示的语法。这意味着您以随机顺序获得它们。删除'. 如果您打算转义该列id,则应使用反引号:

SELECT * FROM data ORDER BY `id` DESC
于 2012-09-16T10:05:37.057 回答
1

当您在表上插入数据时,并不意味着新数字(或最高)始终位于最低行。它随机插入记录。ORDER BY当您通过 using子句检索行时,您可以对其进行排序的唯一方法,例如

SELECT *
FROM tableName
ORDER BY ID DESC

所以假设 ID 是数字。如果您的 ID 存储为字符串,那么您应该其转换为数字,

SELECT *
FROM tableName
ORDER BY CAST(ID AS SIGNED) DESC

更新 1

它应该是

$res = mysql_query("SELECT * FROM data ORDER BY `id` DESC");

不是

$res = mysql_query("SELECT * FROM data ORDER BY 'id' DESC");

你所做的是你ID用单引号包围了它,迫使服务器将其读取为字符串而不是Numeric

于 2012-09-16T09:59:56.623 回答
0

当您不使用任何ORDER BY子句时,PHPMyAdmin 中的顺序是一种随机的。事实上,新行可以取代旧行。

我很好奇你是如何在 PHP 中排序DESC的。

于 2012-09-16T09:58:48.707 回答
0

不要绝对信任 GUI Web 界面,因为有时(并非总是)它会在会话管理中出错,但是您可以使用它运行 SQL 查询。

1- 要运行 SQL 查询,请单击导航栏上的“SQL”。

2- 在提供的框中输入您的 SQL。

SELECT *
FROM tableName
ORDER BY ID DESC

3- 单击“开始”。

于 2012-09-16T10:10:15.553 回答