首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PHP: Mysql限制范围号

PHP: Mysql限制范围号
EN

Stack Overflow用户
提问于 2013-10-30 10:27:26
回答 1查看 1.6K关注 0票数 0

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

最终的结果看起来就像

Select * from prop where id=123 LIMIT 0,4

Select * from prop where id=123 LIMIT 4,8

我的方法是使用for循环来计算要执行的sql语句的数量。然后在循环中:第一个循环0-4,第二个循环是4-8

我在limit 0-4limit 4-8上挣扎

PHP脚本

代码语言:javascript
运行
复制
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;
    }
}
EN

回答 1

Stack Overflow用户

发布于 2013-10-30 12:51:14

要么你不明白这个问题,要么解释得很好。

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

下一个问题是,您没有说明结果是否需要可重复--例如,如果有带有主键1和2的行,这些行是否总是在同一个查询中返回。如果没有显式的ORDER子句,则将根据查询查找行的顺序返回行。

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

您提供的代码计算了行数( where ref = 'SB2004' ),但随后创建了未经过滤的查询--为什么?

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

下一个问题是,在这样的循环中运行SELECT查询从来没有很好的理由。您并没有透露您打算对select查询做什么。但根据后来的更新..。

代码语言:javascript
运行
复制
 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";
 }

将其进一步细化为只对数据库发出单个查询是非常简单的。

如果你真的必须生成个人选择..。

代码语言:javascript
运行
复制
 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"
 }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19679708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档