美好的一天。
对于页面导航,有时需要使用两个查询:
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
- 它无法回答。
答案 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()
当然,库可以自由地预取未知数量的行以提高性能。