2012-04-14 2 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

+0

Он сказал, что он хочет, 8 изображений на странице, если она создает ссылки идти дальше и предыдущая страница галерея (которая просто идет на gallery.php? page = #), ему просто нужно будет отрегулировать его оператор SQL, чтобы получить только изображения, которые ему нужны для этой страницы @Baba – Ozzy

+0

№ OP ищет «ограничить мои результаты только 8 в месяц " – nnichols

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 ведьма у вас уже есть, и некоторые 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

Это то, что известно как "наибольший п в группу" запрос. Если у вас есть 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 
Смежные вопросы