2012-04-14 40 views
0

我想從我的數據庫中選擇每張照片,然後按月顯示它們。我在這裏有這樣的代碼:從數據庫返回的限制結果

<?php 
if (isset($_COOKIE['user_id'])) { 
    if (!isset($_GET['user_id'])) { 
     $user_id= $_COOKIE['user_id']; 
    } else { 
     $user_id= $_GET['user_id']; 
    } 
    $connect= mysqli_connect("localhost", "root", "", "si"); 
    $query= "SELECT * FROM posts WHERE user_id= $user_id ORDER BY date DESC"; 

    $result= mysqli_query($connect, $query) 
     or die('error with query'); 
    $date = "0"; 

    while ($row= mysqli_fetch_array($result)) { 
     if ($date != $row['date']) { 
      echo "<p> ".$row['date']."</p><br/>"; 
      $date = $row['date']; 
     } 
     echo '<img src="'.$row['picture']. '"/>' . "<br/>"; 
    } 
} 
?> 

唯一的問題是,我的代碼顯示每個月的每個圖像,這使得一個過大的頁面。我想將我的結果限制爲每月只有8個(如果沒有該月的事件8圖片,則會減少),然後顯示「顯示更多...」鏈接(如果超過8個)。我知道如何添加一個LIMIT到我最初的查詢,但這不適用於這種情況。我能做什麼?

這裏是我希望它看起來: desired layout

回答

1

添加LIMIT $start, $numToDisplay

你的SQL語句,並使用PHP來計算$start變量的新值。

例如每頁$pageNum = $_GET["page"]和8個圖像意味着你可以計算出:

$numToDisplay = 8; 
$start = ($pageNum-1)*$numToDisplay; 
+1

這是非常錯誤的..再次閱讀問題你成爲下投票磁鐵 – Baba 2012-04-14 20:53:14

+0

他說,他希望在頁面上8倍的圖像,如果它創建鏈接轉到下一個和上一個頁面之前一個畫廊(這只是去gallery.php?page =#),他只需要調整他的SQL語句,以獲得他所需要的圖像@Baba – Ozzy 2012-04-14 20:56:04

+0

編號OP正在尋找「限制我的結果只8每月「 – nnichols 2012-04-15 00:07:15

0

你需要做的是監控畫面計數

$pickLimit = array(); 
while ($row = mysqli_fetch_array ($result)) { 

    if ($date != $row ['date']) { 
     echo "<p> " . $row ['date'] . "</p><br/>"; 
     $date = $row ['date']; 
    } 

    $pickLimit [$date] = isset ($pickLimit [$date]) ? $pickLimit [$date] : 0; 
    if ($pickLimit [$date] > 7) 
     continue; 

    echo '<img src="' . $row ['picture'] . '"/>' . "<br/>"; 
    $pickLimit [$date] ++; 
} 
0

這可以使用PHP腳本whitch你已經有了一些輕鬆完成CSS技巧,也用於創建一個動畫滑塊/旋轉木馬。事情是這樣的:

<div id="carousel"> 
    <div id="slider"> 
    <?php foreach($images as $img) { ?> 
     <div class="image"> 
      <img src="<?php echo $img; ?>" /> 
     </div> 
    <?php } ?> 
    </div> 
</div> 

對於CSS:

#carousel { 
    width: 900px; /* how much you need */ 
    height: 100px; /* how much you need */ 
    overflow: hidden; 
} 
#slider { 
    width: auto; 
    height: 100px; 
} 
.image { 
    float: left; 
} 
0

這就是被稱爲 「每組最大的N」 查詢。如果你search on here有很多不同的解決方案的例子。這裏是其中之一 -

SELECT * 
FROM (
    SELECT 
     tmp.*, 
     @r := IF(@m=DATE_FORMAT(`date`, '%Y%m'), @rank + 1, 1) rank, 
     @m := DATE_FORMAT(`date`, '%Y%m') 
    FROM (
     SELECT * 
     FROM posts 
     WHERE user_id = $user_id 
     ORDER BY date DESC 
    ) tmp, (SELECT @m:=NULL, @r:=NULL) initvars 
) tmp2 
WHERE rank <= 8