2013-10-30 148 views
1

我想獲得一個表中的記錄數,然後將它們除以4後將它們除以4我想創建具有基於我的結果的極限範圍的sql語句。例如,我有8條我除以4的表,我將創建一個限制範圍像limit 0,4limit 4,8 2個SQL語句PHP:Mysql極限範圍數字

最終結果會像

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腳本掙扎

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; 
    } 
} 
+2

[請停止使用mysql_ *函數(http://stackoverflow.com/q/12859942/1238019)在新的代碼,他們[已正式棄用](https://wiki.php.net/rfc/mysql_deprecation)。相反的,對[預處理語句(http://dev.mysql.com/doc/refman/5.0/en/sql-syntax-prepared-statements.html)看看,然後用[mysqli的(HTTP:/ /php.net/manual/en/book.mysqli.php)或[PDO](http://php.net/manual/en/book.pdo.php)。 – zessx

+0

這是什麼目的?可能有更好的方法 – NoLiver92

+0

我所需要的只是打印echo 2選擇語句,其限制範圍爲4的倍數,導致它將用於在divs上進行中繼的分頁插件。除非存在打印出sql語句的準備語句 – user2819330

回答

0

要麼你不明白的問題或有不解釋得非常好。

這裏最直接的問題是您誤解了LIMIT子句的語法。第一個參數指定要開始的偏移量,第二個參數定義要返回的行數,因此LIMIT 4,8將返回8行(假設數據集中有12行或更多行)。

下一個問題是,你還沒有說如果結果需要重現 - 例如,如果您有主鍵爲1和2的行,是否應始終在相同的查詢中返回這些行。如果沒有明確的ORDER BY子句,則這些行將根據查詢找到的順序返回。

下一個問題是,你還沒有解釋你想怎麼處理最後一種情況,當行的總數不是的偶數倍4.

您所提供的代碼數量進行計數行where 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"; 
} 

是微不足道的進一步完善這一隻發出一個查詢到數據庫中。

如果你真的必須生成單獨的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" 
}