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/>";
    }
}
?>

唯一の問題は、私のコードが毎月のすべての画像を表示することです。これにより、ページが非常に大きくなります。結果を 1 か月あたり 8 枚 (または、その月に 8 枚のイベントがない場合はそれ以下) に制限し、8 枚を超える場合は「もっと見る...」リンクを表示したいと考えています。私の最初のクエリには LIMIT がありますが、このシナリオでは機能しません。私に何ができる?

これが私が望む方法です: 希望のレイアウト

4

4 に答える 4

1

追加LIMIT $start, $numToDisplay

を SQL ステートメントに追加し、PHP を使用して$start変数の新しい値を計算します。

たとえば$pageNum = $_GET["page"]、1 ページあたり 8 枚の画像は、次のように計算できることを意味します。

$numToDisplay = 8;
$start = ($pageNum-1)*$numToDisplay;
于 2012-04-14T20:42:44.807 に答える
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] ++;
}
于 2012-04-14T20:51:40.957 に答える
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;
}
于 2012-04-14T23:27:31.633 に答える
0

これは、「グループごとの最大 n」クエリとして知られているものです。ここで検索すると、さまざまなソリューションの例がたくさんあります。ここにそれらの1つがあります-

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
于 2012-04-14T23:50:59.627 に答える