在MySQL结果中选择任意行

时间:2018-10-25 03:50:49

标签: php mysql

我正在一个产品页面上,希望能够选择我要引用的MySQL结果。

例如,我希望能够引用第5行中的结果,而不必执行循环才能到达第5行。而且以后仍然可以访问所有行。最初,我想到something $row['result'][4]仅获得第5行,但意识到这将返回第一行结果列中的第5个字符。

有什么好办法吗,这样我就可以随意访问任何行,而不必处理循环并重新查询数据库以重置结果的位置?

编辑: 我使用的最基本的查询是SELECT * FROM products ORDER BY id ASC LIMIT 25 因此它返回25行。例如,我希望能够获得25个列表中的第5行,而不必使用fetch_assoc() 5次或将查询限制为1行,且偏移量为5。

编辑2: 谢谢大家的帮助,我得到了Jakupov的解答,Jakupov的回答被选为该问题的答案。

3 个答案:

答案 0 :(得分:1)

那没有道理。除非查询中有明确的order by子句,否则mySql表中的行没有内在的“顺序”。

所能做的就是将每一行读入一个PHP数组,然后在任何时候以任意顺序随意访问每个数组元素。

如果您恰好使用MySQLi,那么mysqli_fetch_array可能是您的理想选择。

答案 1 :(得分:1)

我不确定100%,但您实际上可能正在寻找$row[4]['result'],不是 $row['result'][4];

我建议您运行print_r($row)来查看实际的数组结构,然后从那里开始工作。

这当然是假设您已经在查询中检索了多个行,某些框架采用了这种方式。如果这是传统的一次获取操作,您一次只获取一行,而又不想获取前4行,那么您需要某种其他机制来查询数据库,以便从逻辑上获取“第5行”

最简单的示例可能是带有auto_increment的整数主键(例如“ id”)。然后,只需在查询中添加“ where id = 5”即可。

答案 2 :(得分:1)

fetch_all()可以帮助您一次获取所有行。

如果您不能使用fetch_all(),仍然可以只使用一次fetch_assoc()循环:

$rows = [];
while ($row = mysqli_fetch_assoc($result)) {
  $rows[] = $row;
}
var_dump($rows[4]);