2011-12-13 54 views
0

我有这个代码工作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”字段设置了自动增量值。

+1

你如何定义最新?基于ID? – Zohaib

+3

删除'id'列的引号。 –

+0

你忘记了开始偏移例如:'SELECT * FROM wdclients ORDER BY id DESC LIMIT 0,6' –

回答

3

为@BN说,除去周围id报价。让您的查询是这样的:

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

,或者,如果你坚持,就变成这样的:

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

通知()和(`

之间的区别
+0

我没有看到你的答复在这里和你的问题上的查询之间的任何区别。 – ariefbayu

+0

工作代码:'SELECT * FROM wdclients ORDER BY id DESC LIMIT 0,6' – Boldie

+0

您不知道最新的行具有最高的ID。 –

1

虽然它通常会诀窍,但按id排序并不能保证获得最新的数据输入。根据您的愿望,最好添加一个DATETIME字段,如date_created或date_updated,其中包含插入记录或上次更新记录时的时间戳记。这样,你一定会按照适当的时间顺序获得数据。

0

这是因为您已将ID放在常规单引号中。你必须使用反引号,以便为MySQL将它解析为一个值:

$SQL = "SELECT * FROM wdclients ORDER BY `id` DESC LIMIT 6"; 
+0

这是为什么这个投票下来? – ariefbayu

+0

“有此代码,工作100%,但它不显示所需的最新详细信息” – 2011-12-13 13:03:32

1

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

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

排序由字符串字面量('id')并没有真正做任何事情,所以你结束了与“自然”排序。

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

如果要按插入时间定义实际排序,您应该使用已知的唯一连续值自己设置ID。

相关问题