2011-12-27 184 views
2

嗨,大家好我一直在從SQL表1中提取行1.我兩年前寫了這段代碼,並意識到它是多麼的可怕無效。我想通過輸入一個簡單的for-loop到自動化來加速編碼。使用for循環加快PHP代碼輸入

$maxRows_dd1 = 10; 
$pageNum_dd1 = 0; 
if (isset($_GET['pageNum_dd1'])) { 
    $pageNum_dd1 = $_GET['pageNum_dd1']; 
} 
$startRow_dd1 = $pageNum_dd1 * $maxRows_dd1; 

$maxRows_dd2 = 10; 
$pageNum_dd2 = 1; 
if (isset($_GET['pageNum_dd2'])) { 
    $pageNum_dd2 = $_GET['pageNum_dd2']; 
} 
$startRow_dd2 = $pageNum_dd2 * $maxRows_dd2; 

$maxRows_dd3 = 10; 
$pageNum_dd3 = 2; 
if (isset($_GET['pageNum_dd3'])) { 
    $pageNum_dd3 = $_GET['pageNum_dd3']; 
} 
$startRow_dd3 = $pageNum_dd3 * $maxRows_dd3; 

... dd4到dd99介於兩者之間!

$maxRows_dd100 = 10; 
$pageNum_dd100 = 99; 
if (isset($_GET['pageNum_dd99'])) { 
    $pageNum_dd32 = $_GET['pageNum_dd99']; 
} 
$startRow_dd99 = $pageNum_dd99 * $maxRows_dd99; 

對應於:

mysql_select_db($database_rent, $rent); 
$query_dd1 = "SELECT * FROM rent"; 
$query_limit_dd1 = sprintf("%s LIMIT %d, %d", $query_dd1, $startRow_dd1, $maxRows_dd1); 
$dd1 = mysql_query($query_limit_dd1, $rent) or die(mysql_error()); 
$row_dd1 = mysql_fetch_assoc($dd1); 

if (isset($_GET['totalRows_dd1'])) { 
    $totalRows_dd1 = $_GET['totalRows_dd1']; 
} else { 
    $all_dd1 = mysql_query($query_dd1); 
    $totalRows_dd1 = mysql_num_rows($all_dd1); 
} 
$totalPages_dd1 = ceil($totalRows_dd1/$maxRows_dd1)-1; 

mysql_select_db($database_rent, $rent); 
$query_dd2 = "SELECT * FROM rent"; 
$query_limit_dd2 = sprintf("%s LIMIT %d, %d", $query_dd2, $startRow_dd2, $maxRows_dd2); 
$dd2 = mysql_query($query_limit_dd2, $rent) or die(mysql_error()); 
$row_dd2 = mysql_fetch_assoc($dd2); 

if (isset($_GET['totalRows_dd2'])) { 
    $totalRows_dd2 = $_GET['totalRows_dd2']; 
} else { 
    $all_dd2 = mysql_query($query_dd2); 
    $totalRows_dd2 = mysql_num_rows($all_dd2); 
} 
$totalPages_dd2 = ceil($totalRows_dd2/$maxRows_dd2)-1; 

mysql_select_db($database_rent, $rent); 
$query_dd3 = "SELECT * FROM rent"; 
$query_limit_dd3 = sprintf("%s LIMIT %d, %d", $query_dd3, $startRow_dd3, $maxRows_dd3); 
$dd3 = mysql_query($query_limit_dd3, $rent) or die(mysql_error()); 
$row_dd3 = mysql_fetch_assoc($dd3); 

if (isset($_GET['totalRows_dd3'])) { 
    $totalRows_dd3 = $_GET['totalRows_dd3']; 
} else { 
    $all_dd3 = mysql_query($query_dd3); 
    $totalRows_dd3 = mysql_num_rows($all_dd3); 
} 
$totalPages_dd3 = ceil($totalRows_dd3/$maxRows_dd3)-1; 

...一路DD100!

我如何使用for循環來加速從dd1到dd100的每個代碼塊的所有代碼?

+3

Nooo我的眼睛! ;) – PeeHaa 2011-12-27 17:44:54

+0

我的經理讓我更新他的系統,我剛剛意識到我會浪費多少時間來嘗試添加100個dd實例! – methuselah 2011-12-27 17:45:45

+0

您對從數據庫中檢索的這些數據實際上做了什麼?在頁面或其他東西上顯示它?爲什麼你需要這些單獨的結果?你不能只查詢一次數據庫嗎? – DaveRandom 2011-12-27 17:46:27

回答

1

這是一種更有效的代碼,你做了什麼上面做的正是:

<?php 

    // You only need to do these once as they are the same throughout 
    mysql_select_db($database_rent, $rent); 
    $maxRows = 10; 
    // This code gets the total number of rows in the database 
    $totalRowsAll = mysql_fetch_assoc(mysql_query("SELECT count(*) AS total FROM rent", $rent)); 
    $totalRowsAll = (int) $totalRowsAll['total']; 

?> 
<div class="tab_container"> 
    <div id="tab1" class="tab_content"> 
     <table width="100%" border="0" cellspacing="5" cellpadding="5" id="1"> 
<?php 

    for ($i = 0; $i < 100; $i++) { 

    // Calcluate value for this iteration and query database 
    $pageNum = (isset($_GET['pageNum_dd'.($i + 1)])) ? (int) $_GET['pageNum_dd'.($i + 1)] : $i; 
    $startRow = $pageNum * $maxRows; 
    $query = "SELECT * FROM rent LIMIT $startRow, $maxRows"; 
    $result = mysql_query($query, $rent) or die(mysql_error($rent)); 
    $totalRows = (isset($_GET['totalRows_dd1'])) ? (int) $_GET['totalRows_dd1'] : $totalRowsAll; 
    ${'totalPages_dd'.($i + 1)} = ceil($totalRows/$maxRows) - 1; 

    // Now print this row 
?> 
     <tr height="100px" align="center"> 
<?php 

    while ($row = mysql_fetch_assoc($query)) { 

?> 

      <td style="background-color: <?php echo $row['colour']; ?>;" onclick="window.location='pay.php?id=<?php echo $row['dNo']; ?>&user=<?php echo $username; ?>'" onmouseover="this.style.cursor='pointer'"> 
       <form action="pay.php?id=<?php echo $row['dNo']; ?>&user=<?php echo $username; ?>" method="post"> 
       <input type="hidden" id="<?php echo $row['dNo']; ?>"> 
       <input type="hidden" value="<?php echo $username; ?>"> 
       <button type="submit" class="link" id="t<?php echo $row['dNo']; ?>"> 
        <span><?php echo $row['dNo']; ?></span> 
       </button> 
       </form> 
      </td> 
<?php 

    } // End while 

?> 
     </tr> 
<?php 

    } // End for 

?> 
     </table> 
    </div> 
</div> 

... 然而

我相當肯定,這可以在一個單一的來概括查詢以獲得所需的所有結果,這將會更加高效並大大減少數據庫負載。但由於每行使用了$_GET['pageNum_dd*']$_GET['totalPages_dd*']變量,所以我不能100%確定這一點,而且我不知道如何在不知道更多產生什麼的情況下完成這些操作。您需要檢查這些可以傳遞的參數是否真的必要/有用。實際上,它們可能是由於行長度不同而造成的,每行的單元數量不等 - 這可能不是您想要的。

對於變量$totalPages_dd*也是如此,這些變量在以下分配但從未在任何地方使用過。它們可能沒有用處,分配它們可能毫無意義。

+0

嗨,感謝您的幫助 - 我有20個選項卡,即'

'每個都有10行5行 - 代碼能夠輸出嗎?下面是它應該是什麼樣子的圖像(但是一直到951-1000) - http://i.imgur.com/JXM0d.jpg – methuselah 2011-12-28 15:55:14