我遇到了一个奇怪的问题。每当我向数据库添加一个新条目时,它都会给它一个更高的 id 编号,但不知何故将它视为一个较低的编号并将其置于旧条目之下。
在 PHP 中排序时DESC
,我也得到了这个命令,有人知道这里出了什么问题吗?
我$res = mysql_query("SELECT * FROM data ORDER BY 'id' DESC");
用来对它们进行排序,它给出的顺序与图片中的相同。(不知道为什么我在这里被否决但是好的..)
图片:
您的查询是:
SELECT * FROM data ORDER BY 'id' DESC
您正在按string 'id'
排序,请注意不在引号内时突出显示的语法。这意味着您以随机顺序获得它们。删除'
. 如果您打算转义该列id
,则应使用反引号:
SELECT * FROM data ORDER BY `id` DESC
当您在表上插入数据时,并不意味着新数字(或最高)始终位于最低行。它随机插入记录。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
当您不使用任何ORDER BY
子句时,PHPMyAdmin 中的顺序是一种随机的。事实上,新行可以取代旧行。
我很好奇你是如何在 PHP 中排序DESC
的。
不要绝对信任 GUI Web 界面,因为有时(并非总是)它会在会话管理中出错,但是您可以使用它运行 SQL 查询。
1- 要运行 SQL 查询,请单击导航栏上的“SQL”。
2- 在提供的框中输入您的 SQL。
SELECT *
FROM tableName
ORDER BY ID DESC
3- 单击“开始”。