为什么这个查询没有给我最近插入的行?

时间:2011-12-13 12:51:55

标签: php mysql

我有100%的代码,但它没有显示MySQL数据库所需的最新细节。

$SQL = "SELECT * FROM wdclients ORDER BY 'id' DESC LIMIT 6";
$result = mysql_query($SQL);
while ($db_field = mysql_fetch_assoc($result)) {
    echo $latest1;
    print $db_field['clientid'];
    echo $latest2;
    print $db_field['cname'];
    echo $latest3;
    print $db_field['cname'];
    echo $latest4;
}

现在的问题是我要求代码只显示数据库中的6个最新条目。我在数据库中有超过500个客户端,但它只显示前6个客户端并且从不更新。

" ID"数据库中的字段已设置自动增量值。

4 个答案:

答案 0 :(得分:3)

如@BN所说,删除id周围的引用。像这样进行查询:

SELECT * FROM wdclients ORDER BY id DESC LIMIT 0,6

或者,如果你坚持,把它改成这样的东西:

SELECT * FROM wdclients ORDER BY `id` DESC LIMIT 0,6

注意(')和(`

之间的区别

答案 1 :(得分:1)

虽然它通常可以解决问题,但按ID排序并不能保证输入最新数据。您最好添加一个DATETIME字段,如date_created或date_updated,其中包含插入或上次更新记录时的时间戳,具体取决于您的意愿。这样你就可以确保按正确的时间顺序获取数据。

答案 2 :(得分:1)

您的第一个问题是您使用单引号而不是反引号来分隔该字段名称。

SELECT * FROM wdclients ORDER BY `id` DESC LIMIT 6

按字符串文字('id')排序并没有真正做任何事情,所以你最终得到了“自然”排序。

即存储中的物理排序,因为MySQL表没有固有的排序。而且,即使您在该ID字段上设置AUTO_INCREMENT,也不会保证永久产生连续值(例如,可以使用来自旧的已删除行的ID)。

如果要按插入时间定义实际排序,则应使用已知的唯一顺序值自行设置ID。

答案 3 :(得分:0)

这是因为你把id放在普通的单引号中。您必须使用反引号才能将MySQL解析为值:

$SQL = "SELECT * FROM wdclients ORDER BY `id` DESC LIMIT 6";
相关问题