Php 有限制地计算所有行

Php 有限制地计算所有行,php,mysql,Php,Mysql,我需要使用where子句筛选表中的行,计算此筛选器中的行总数,然后限制分页的行数 什么是最快/更有效的 使用sql查询对行进行计数。使用sql查询选择具有限制的行。 使用sql查询选择所有行。用PHP计算数组。使用PHP拆分数组。 或者有没有其他方法来计算所有行并获得有限的结果集?MySQL限制应该可以帮到您。这是一种更有效的方法,因为它有助于只获取要显示的相关记录,而不获取其他内容 请注意,应在执行查询之前设置startingIndex、numberOfRecordsPerPage变量 SEL

我需要使用where子句筛选表中的行,计算此筛选器中的行总数,然后限制分页的行数

什么是最快/更有效的

使用sql查询对行进行计数。使用sql查询选择具有限制的行。 使用sql查询选择所有行。用PHP计算数组。使用PHP拆分数组。 或者有没有其他方法来计算所有行并获得有限的结果集?

MySQL限制应该可以帮到您。这是一种更有效的方法,因为它有助于只获取要显示的相关记录,而不获取其他内容

请注意,应在执行查询之前设置startingIndex、numberOfRecordsPerPage变量

SELECT * FROM MY_TABLE where 
(...) //ALL CONDITIONS go here
LIMIT startingIndex, numberOfRecordsPerPage;

对于两个参数,第一个参数指定 要返回的第一行,第二行指定 要返回的行。初始行的偏移量为0而不是1:

从tbl限制5,10中选择*;检索第6-15行

为了确定是否需要返回任何记录,必须首先运行带有COUNT且不带任何限制条件的查询:

`SELECT COUNT(*) FROM MY_TABLE where (...) //ALL CONDITIONS go here`
并分开存放。这应为适用于WHERE条款的总记录

如果sum startingIndex+numberOfRecordsPerPage大于等于TOTAL\u COUNT,则该分页集应为整个列表的最后一个,不允许用户单击“下一步”按钮

PS:另外,正如在评论中指出的那样,您可能想看看重型举重的替代框架,比如Java的CriteriaAPI,特别是如果您的WHERE条件也是动态生成的

即使对返回的结果应用了限制,也应该使用SQL\u CALC\u FOUND\u ROWS和函数返回总行数。运行查询后,将返回结果,然后可以运行SELECT FOUND_ROWS返回总行数,而无需再次运行查询

SELECT SQL_CALC_FOUND_ROWS * FROM my_table WHERE column = 'something' LIMIT 10;
SELECT FOUND_ROWS() AS total_results;

使用两个查询,一个用于检索总行数,另一个用于获取行数。LIMIT子句中的第一个参数指定第一行current_page*post_per_page的偏移量,第二个参数指定每_page返回post_的最大行数


1是的,所以你知道你有多少页,2个在限制内选择->要显示在页面XU你想要这个函数:用它,不需要运行你的查询两次。我知道你不是在问框架,但是你应该考虑使用一个,比如Laravel。像这样的操作会容易得多。我使用的是Laravel,不幸的是,Elounten不适合复杂的查询,所以必须使用raw。@PedroMoreira这实际上是一个数据库问题,而不是框架问题。不管框架如何,答案都是一样的,例如,我在F3框架、WordPress、Java等中使用了示例中的代码。我认为这并没有回答问题的初衷,即如何知道行的总数,但只返回X行?。问题是,如果总共只有12行,您如何知道LIMIT 5,10将返回6-15,而它不能返回?
SELECT COUNT(*) AS num_rows FROM table;

SELECT * FROM table LIMIT start, length;