如何获取mysqlquery返回的记录的序号位置


how do I get the ordinal position of a record returned by mysql_query

下面是我要做的。我有PHP代码,它会从数据库表中获取一条记录。

这篇文章被标记为重复,所以我在MySQL上尝试了答案,我如何在表中生成包含记录索引的列?正如预期的那样,当记录的顺序位置实际上是19782时,它给了我1的顺序位置。这个链接根据返回的结果给出了行号,我的问题不同,因为我在寻找基于整个表的单个返回记录的顺序位置。我在最初的帖子中说了两次。

$query-'SELECT * FROM ' . $datafile .  ' WHERE ' . $seekindex . ' = "' $seekdata . '" ORDER BY ' . $fieldname;

其中:数据文件是当前打开的数据库中的任何有效表。seekindex是表中的任意列名。seekdata由用户提供。fieldname是表中的任何列名。

查询工作正常,并返回要求返回的记录。如果所有记录都是按字段名排序选择的,我想知道该记录在数据文件中的顺序位置。我需要在fieldname上一次向下滚动1到10条记录。然后我可以使用一个简单的查询,例如:

$rn=mysql_result($result, 0, 'rownum'); // or what ever would give me the ordinal position.
$rn10=$rn+10;
$query='SELECT * FROM ' . $datafile . ' ORDER BY ' . $fieldname  . ' LIMIT ' $rn .','. $rn10;

可能有不止一条记录符合原始查询。一个很好的例子是一个邮政编码表,用户可能在其中查找附近城市的邮政编码,然后键入他们的邮政编码并希望向下滚动,直到找到他们要查找的城市。如果有20条记录符合相同的标准,而我得到了接下来的10条记录,如果我只是使用,我将永远不会移动。

$query-'SELECT * FROM ' . $datafile .  ' WHERE ' . $seekindex . ' >= "' $seekdata . '" ORDER BY ' . $fieldname . ' LIMIT 1,11;

此外,表中可能有也可能没有唯一的字段或ID。我总是使用它们,但在这种情况下,我不是表的创建者。

我试着获取所有记录并进行排序,直到找到我选择的记录,但数据文件的一些候选记录超过了20万条,因此对于动态搜索来说,这变得不切实际,需要等待2分钟以上才能使页面向下生效。

有没有一种方法可以根据给定ORDER BY的所有记录来获得单个记录的顺序位置?还是有另一种方式我看不见,因为我下定决心要让它发挥作用?提前谢谢。

您可以非常容易地制作自己的序数

$counter = 0;
while($row = mysql_fetch_assoc($result)) {
    // Do your stuff here
    $counter++;
}

这对于像mysql_data_seek这样需要提供记录位置的东西来说是实用的。

最后但同样重要的是,请停止使用mysql_query和相关函数。它们被折旧了。