【问题标题】:Select nth record from a SQL result set in php从 php 中的 SQL 结果集中选择第 n 条记录
【发布时间】:2011-05-13 15:46:24
【问题描述】:

我运行一个查询并获得一个结果集。我需要从此结果集中获取第 n 条记录。有什么想法可以做到这一点吗?

我无法直接从数据库中选择第 n 条记录,因为我需要过滤它并且不知道结果集中有多少条记录。所以我不能确定将哪个数字传递给 mysql_result 方法,即

  1. 根据一定的条件,从一个表中获取几行
  2. 从这些行中,选择第n行(n个数不固定,取决于返回的记录数)

基本思想是根据一个设定的条件得到所有的结果,并从中得到一个随机的结果。

有什么想法吗?谢谢。

【问题讨论】:

  • 所以你不能使用 LIMIT 的偏移量?为什么不直接获取记录、过滤、循环,直到达到 N 为止。
  • 没有。正如我所说,n 不是固定的。它是根据查询返回的结果数计算的。
  • 作为人类,您将如何确定“n”的值.. 如果您能解释一下,也许我们可以帮助您更好地将其转化为代码
  • 请提供一些代码。也许我们可以调整您的方法。

标签: php mysql


【解决方案1】:

您的问题似乎不清楚。但是这里有一个猜测:

你要选择中间的记录:

$count = mysql_num_rows($result);
$middle_name = mysql_result($result, intval($count/2), 'name');

除此之外,如果您的记录非常少,您也可以这样做:

$rs = array();
while ($row = mysql_fetch_assoc($result)){
     $rs[] = $row;
}

然后您可以使用$rs[N-1] 达到第N 条记录。

如果您只获取一条记录,请阅读 PHP 手册中的 mysql_data_seek

【讨论】:

  • 不能使用 mysql_result 因为我想获取整行。感谢 mysql_data_seek 提示。
  • 您可以先执行mysql_data_seek,然后执行我的mysql_fetch_assoc 解决方案,但在while 循环中,将break; 放在$rs[]... 语句之后,这样您的$rs[0] 将成为您的项目。您可以删除$rs=array()$rs[]... 语句并仅使用$row。它将是您记录的键值关联数组。
【解决方案2】:

基本思想是根据一个设定的条件得到所有的结果,并从中得到一个随机的结果。

SELECT ... ORDER BY RAND() LIMIT 1

我知道这不是最佳实践,但由于给定的信息相当稀少,这可能是进一步阅读的起点。老实说,在足够小的应用程序中,这通常是最简单的解决方案。

【讨论】:

  • 这太可怕了。它似乎没有回答(理所当然的,过于模糊的)问题,并且是 SQL-don'ts 之一。
  • 正确,但由于问题中没有太多信息,这很可能是进一步阅读的起点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-28
  • 2012-07-13
相关资源
最近更新 更多