我想从我的数据库中选择每张照片,然后按月分组显示。我在这里有这个代码:
<?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个图片,则更少),然后显示&#34;显示更多......&#34;链接,如果有超过8.我知道如何添加LIMIT到我的初始查询,但这不适用于这种情况。我该怎么办?
以下是我希望它的外观:
答案 0 :(得分:1)
添加LIMIT $start, $numToDisplay
到您的SQL语句,并使用PHP计算$start
变量的新值。
e.g。每页$pageNum = $_GET["page"]
和8张图片意味着您可以计算:
$numToDisplay = 8;
$start = ($pageNum-1)*$numToDisplay;
答案 1 :(得分: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] ++;
}
答案 2 :(得分: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;
}
答案 3 :(得分: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