2013-01-01 92 views
0

我決定在這裏重新編寫並詳細說明,而不是再發布一次。此查詢是否可以更改爲執行兩個功能?

我收到了jtheman的以下代碼,它允許我從我的數據庫中選擇52個更新,並添加一個新的並每週刪除一箇舊的。它的工作絕對完美。

他的代碼:

$starttime = strtotime("28 December 2012"); // a recent Friday 
    $week = 7 * 24 * 60 * 60; // time value of a week 
    $posts = 185; // number of posts in your db 
    $limit = 52; // number of shown posts 
    $offset = floor((time()-$starttime)/$week); // rounds down difference in weeks from startdate until now 
    while ($offset>$posts-$limit) $offset = $offset - ($posts-$limit); 
    // this will start over when you have reached the end of the cycle ie offset 148... 

而且我的查詢:

// retrieve all update details 
$conn = dbConnect('query'); 
$sql = "SELECT * 
FROM updates 
WHERE flag_live = 'Y' 
ORDER BY update_id DESC 
LIMIT ".$offset.",".$limit; 
$result = $conn->query($sql) or die(mysqli_error()); 
$uInfo = $result->fetch_assoc(); 

再次,這完美的作品。新問題是,我在一個頁面上獲得了52個更新,我希望能夠設置每頁4個,並滾動13個頁面而不是一個長頁面。

所以,我想要做的就是改變這個查詢,以便選擇52個更新(並且每個星期五添加一個新的更新並刪除一箇舊的更新),但是在哪裏我只能顯示4個在頁面上的時間。我意識到這不是一個分頁問題,​​因爲這是編寫查詢本質上做兩個功能。

這可以通過子查詢來完成嗎?我可以使用jQuery滑塊或等價物來完成分頁,但我真的想避免這種情況。

非常感謝!

+2

那麼你卡在哪裏? – hafichuk

+0

呃...就像如何使它工作。如何獲取上面的代碼並將52條記錄拖到頁面上。 – wordman

+0

最好的辦法是在客戶端做這些操作看看http://www.datatables.net/ – Moes

回答

1

到PHP代碼(服務器端)內解決它,你可以其中x是頁碼添加URL參數?page=x

幾乎是計算在相同:

$starttime = strtotime("28 December 2012"); // a recent Friday 
$week = 7 * 24 * 60 * 60; // time value of a week 
$posts = 185; // number of posts in your db 
$totallimit = 52; // number of shown posts (on all pages) 
$limit = 4; // number of posts on each page. 
$offset = floor((time()-$starttime)/$week); // rounds down difference in weeks from startdate until now 
while ($offset>$posts-$totallimit) $offset = $offset - ($posts-$totallimit); 
// this will start over when you have reached the end of the cycle ie offset 148... 

// get the page number (or set it to 0 if not set) 
if (isset($_GET['page']) && intval($_GET['page'])) $page=intval($_GET['page']); 
else $page = 0; 

$offset = $offset + ($page*$limit); // correct the offset according to the page number 

然後使用您的數據庫查詢,而無需改變。

然後在您的視圖添加網頁鏈接(如果上面是之前執行此代碼的工作):

<?php for($p=0;$p<ceil($totallimit/$limit);$p++): ?> 
    <a href="mypage.php?page=<?php echo $p; ?>" <?php if ($p==$page) echo 'class="active"'; ?>>Page <?php echo $p+1; ?></a> | 
<?php endfor; ?> 

(與你的腳本的正確的文件名替換mypage.php)我添加了一個類該頁面爲當前選定的頁面定位active,但無論如何您都可以這樣做。

+0

你真棒,謝謝你!我通過使用子查詢得到分頁,昨晚從我的另一篇文章中獲得了這些信息,但我今天肯定嘗試了這一點。非常感謝! – wordman

+0

這是如此的輕鬆!作品絕對完美。我不知道該怎麼感謝你才足夠! – wordman

+0

爲你感到高興,它的工作原理。數據表的例子可能有點矯枉過正,但jquery/ajax分頁解決方案也不錯。但是服務器端解決方案往往是堅如磐石的,在某些情況下可能會更好。 – jtheman

0

我認爲這是你要求..使用這個「功能」,你可以「切換」更多的選擇,但我不認爲你真的需要它..只需更改$limit=號碼,以滿足您的需求。

<?php 

    $starttime = strtotime("28 December 2012"); // a recent Friday 
    $week = 7 * 24 * 60 * 60; // time value of a week 
    $posts = 200; // number of posts in your db 
    //$limit = 52; // number of shown posts 

if($posts > 100) // or you can enter here $posts == 200, but it is better 2 leave it on "automatic".. 
{ 
$limit = 52; //or as many you like like 30 
} 
else 
{ 
$limit = 6; // or as many you like ie 10 
} 

    $offset = floor((time()-$starttime)/$week); // rounds down difference in weeks from  startdate until now 
    while ($offset>$posts-$limit) $offset = $offset - ($posts-$limit); 
    // this will make the cycle start over when you have reached the end (ie offset 148)... 

    ?> 
+0

Xfile,看起來好像它可能工作。我明天會看看並告訴你。非常感謝! – wordman

+0

當然會..享受;) – Xfile

+0

我看了這個,並決定詳細闡述這個職位一些。更改'$ limit'不會在這裏工作,因爲它會影響滾動更新。非常感謝您的建議! – wordman