我想获取表中的记录数,然后将它们除以4,将它们除以4后,我想根据我的结果创建具有限制范围的sql语句。例如,我有一个包含8个记录的表,除以4,我将创建2个sql语句,其限制范围为limit 0,4
和limit 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-4
和limit 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;
}
}
答案 0 :(得分:0)
要么你没有理解这个问题,要么没有很好地解释它。
这里最直接的问题是您误解了LIMIT子句的语法。第一个参数指定要开始的偏移量,第二个参数定义要返回的行数,因此LIMIT 4,8将返回8行(假设数据集中有12行或更多行)。
下一个问题是你没有说过结果是否需要重现 - 例如如果您有主键1和2的行,则应始终在同一查询中返回这些行。如果没有显式的ORDER BY子句,将根据查询找到它们的顺序返回行。
下一个问题是,当总行数不是4的偶数倍时,您没有解释如何处理最后一种情况。
您提供的代码会计算行数where ref = 'SB2004'
,但会创建未过滤的查询 - 为什么?
您提供的代码不会更改查询中的限制 - 为什么?
下一个问题是 never 是在这样的循环中运行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";
}
将此进一步细化为仅向数据库发出单个查询是微不足道的。
如果你真的必须生成单独的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);
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"
}