Mysql真的从结果中获取行吗?

时间:2014-04-25 13:39:49

标签: mysql

美好的一天。

对于页面导航,有时需要使用两个查询: 1)$res = mysql_query("SELECT * FROM Table");

- 在上一页和下一页上获取make链接的所有计数行的查询,例如< - 2 3 4 5 6 - >)

2)$res = mysql_query("SELECT * FROM Table LIMIT 20, $num"); // where $num - count rows for page

请告诉我,请真正只使用一个查询数据库,以便在上一页和下一页(< - 2 3 4 5 6 - >)上创建链接并从页面输出行(sql有限制) )?

p.s。:我知道可以使用两个查询和SELECT * FROM Table LIMIT 20 - 它无法回答。

2 个答案:

答案 0 :(得分:4)

如果您想知道在使用LIMIT时从查询中返回 的行数,您可以使用SQL_CALC_FOUND_ROWS and FOUND_ROWS()

  

SELECT语句可以包含LIMIT子句,以限制服务器返回到客户端的行数。在某些情况下,需要知道语句在没有LIMIT的情况下返回了多少行,但是没有再次运行语句。要获取此行计数,请在SELECT语句中包含SQL_CALC_FOUND_ROWS选项,然后再调用FOUND_ROWS():

$res = mysql_query("SELECT SQL_CALC_FOUND_ROWS, * FROM Table");
$count_result = mysql_query("SELECT FOUND_ROWS() AS found_rows");
$rows = mysql_fetch_assoc($rows);
$total_rows = $rows['found_rows'];

这仍然是两个查询(这是不可避免的)但在数据库上更轻,因为它实际上不必运行主查询两次。

答案 1 :(得分:0)

在您访问结果集之前,许多数据库API实际上都没有获取结果集的所有行。

例如,使用Python的内置sqlite:

q = cursor.execute("SELECT * FROM somehwere")

row1 = q.fetchone()
row2 = q.fetchone()

当然,库可以自由地预取未知数量的行以提高性能。