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

时间:2013-12-17 02:49:35

标签: php mysql

这是我想要做的。我有PHP代码,从数据库表中获取记录。

这篇文章被标记为重复,所以我在With MySQL, how can I generate a column containing the record index in a table?尝试了答案,正如预期的那样,它给出了我的序数位置1,当记录的序数位置实际上是19782时。此链接给出基于的行号返回的结果,我的问题不同,因为我正在查看基于整个表的单个返回记录的序号位置。我在原帖中说过两次。

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

其中: datafile是当前打开的数据库中的任何有效表。 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。我总是使用它们,但在这种情况下,我不是表格的创造者。

我尝试获取所有记录并进行排序,直到找到我选择的那个,但是数据文件的一些候选者有超过200K的记录,因此对于动态搜索变得不切实际,等待超过2分钟的页面向下生效。

有没有办法根据给定ORDER BY的所有记录获取单个记录的序号位置?还是有另一种我无法看到的方式,因为我决心让这项工作成功?提前谢谢。

1 个答案:

答案 0 :(得分:0)

你可以很容易地制作自己的序数

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

这对mysql_data_seek这样的事情很实用,你需要提供记录位置。

最后但并非最不重要的是,请停止使用mysql_query及相关功能。它们是depreciated