PHP:Mysql限制范围数字

PHP:Mysql限制范围数字,php,mysql,loops,Php,Mysql,Loops,我希望得到一个表中的记录数,然后将它们除以4,在除以4之后,我希望根据我的结果创建具有限制范围的sql语句。例如,我有一个表,其中有8条记录,我除以4,我将创建2条sql语句,其限制范围类似于limit 0,4和limit 4,8 最终结果将是 从属性中选择*,其中id=123限制0,4 从属性中选择*,其中id=123限制4,8 我的方法是使用for循环,它将计算要生成的sql语句的数量。 然后在循环中:第一个圆圈0-4,第二个圆圈将4-8 我在限制0-4和限制4-8 PHP脚本 includ

我希望得到一个表中的记录数,然后将它们除以4,在除以4之后,我希望根据我的结果创建具有限制范围的sql语句。例如,我有一个表,其中有8条记录,我除以4,我将创建2条sql语句,其限制范围类似于
limit 0,4
limit 4,8

最终结果将是

从属性中选择*,其中id=123限制0,4

从属性中选择*,其中id=123限制4,8

我的方法是使用for循环,它将计算要生成的sql语句的数量。 然后在循环中:第一个圆圈
0-4
,第二个圆圈将
4-8

我在
限制0-4
限制4-8

PHP脚本

include('connect.php');    
$query_1 = "Select COUNT(*) as Total from prop where ref = 'SB2004'";
$results_query_1 = mysql_query($query_1);
 while($row_query_1 = mysql_fetch_array($results_query_1))
 {
        $cnt = $row_query_1['Total'];
 }

 echo $cnt;
 echo "<br>";
 $num_grps = 0;
 if ($cnt % 4 == 0 )
 {
   echo $num_grps = $cnt / 4 ;

 }
$count_chk= $num_grps * 4;
 for ($i=1;$i<=$num_grps;$i++)
{
    //for loop for range
    for()
    {
        $range = '0,4';
        echo "SELECT prop_ref from prop limit".$range;
    }
}
include('connect.php');
$query_1=“选择COUNT(*)作为prop中的总计,其中ref='SB2004';
$results\u query\u 1=mysql\u query($query\u 1);
while($row\u query\u 1=mysql\u fetch\u array($results\u query\u 1))
{
$cnt=$row_query_1['Total'];
}
echo$cnt;
回声“
”; $num_grps=0; 如果($cnt%4==0) { echo$num_grps=$cnt/4; } $count\u chk=$num\u GRP*4;
因为($i=1;$i你要么不理解这个问题,要么解释得不好

这里最直接的问题是您误解了LIMIT子句的语法。第一个参数指定了要开始的偏移量,第二个参数定义了要返回的行数,因此LIMIT 4,8将返回8行(假设数据集中有12行或更多行)

下一个问题是,您没有说明结果是否需要可复制-例如,如果您有主键为1和2的行,那么这些行是否应始终在同一查询中返回。如果没有明确的ORDER BY子句,则将根据查询找到它们的顺序返回这些行

下一个问题是,您没有解释在总行数不是4的偶数倍时如何处理最后一种情况

您提供的代码统计行数
其中ref='SB2004'
,但随后创建未过滤的查询-为什么

您提供的代码不会更改查询中的限制-为什么

下一个问题是,在这样一个循环中运行SELECT查询从来没有一个好的理由。您没有明确说明打算对SELECT查询执行什么操作。但是基于后续的更新

 include('connect.php');    
 $query_1 = "Select COUNT(*) as Total from prop where ref = 'SB2004'";
 $cnt = mysql_fetch_assoc(mysql_query($query_1));

 $blocks=$cnt['Total']/4 + (0 == $cnt['Total'] % 4 ? 0 : 1);

 $qry2="SELECT * FROM prop where ref='SB2004' ORDER BY primary_key";
 $res=mysql_fetch_assoc($qry2);

 for ($x=0; $x<$blocks; $x++) {
    print "<div>\n$block<br />\n";
    for ($y=0; $y<4; $y++) {
       print implode(",", @mysql_fetch_assoc($res)). "\n";
    }
    print "</div>\n";
 }
include('connect.php');
$query_1=“选择COUNT(*)作为prop中的总计,其中ref='SB2004';
$cnt=mysql\u fetch\u assoc(mysql\u query($query\u 1));
$blocks=$cnt['Total']/4+(0==$cnt['Total']%4?0:1);
$qry2=“从prop中选择*,其中ref='SB2004'按主键排序”;
$res=mysql\u fetch\u assoc($qry2);

对于($x=0;$x这是为了什么?在新代码中可能有更好的方法,它们是。取而代之的是,看一看,然后使用or。我所需要的是打印echo 2 select语句,限制范围为4的倍数,因为它将被用于分页插件,该插件在
divs
上进行中继。除非有准备好的语句t打印sql语句为什么分页插件不动态生成这些查询?如果你通过echo输出它们,那么下一步怎么办?你要将它们复制并粘贴到插件代码中…?插件不允许。有没有办法让循环动态打印0,4和4,8
 include('connect.php');    
 $query_1 = "Select COUNT(*) as Total from prop where ref = 'SB2004'";
 $cnt = mysql_fetch_assoc(mysql_query($query_1));

 $blocks=$cnt['Total']/4 + (0 == $cnt['Total'] % 4 ? 0 : 1);

 for ($x=0; $x<$blocks; $x++) {
       $y=$x*4;
       print "SELECT * FROM prop where ref='SB2004' 
           ORDER BY primary_key LIMIT $y,4<br />\n"
 }