sql >> データベース >  >> RDS >> Mysql

各ユーザーからの3つの画像を表示する

    より良い解決策があるかどうかはわかりませんが、これを使用できると思います:

    SELECT p1.userID, p1.picture as pic1, p2.picture as pic2, p3.picture as pic3
    FROM
      pictures p1 left join pictures p2
      on p1.userID=p2.userID and p1.picture<>p2.picture
      left join pictures p3
      on p1.userID=p3.userID and p1.picture<>p3.picture and p2.picture<>p3.picture
    GROUP BY p1.userID
    

    これにより、ユーザーごとに3つの画像が選択されます。ユーザーの画像が3つ未満の場合はヌルが表示され、それ以上の場合はすべての画像から3つが選択されます。

    別の方法として、それぞれが異なる行に3つの画像を表示するのは、変数を使用する次のクエリです。

    SELECT userid, picture
    FROM (
      SELECT
        userid,
        picture,
        case when @prec_id=userid then @row:[email protected]+1 else @row:=1 end as row,
        @prec_id:=userid
      FROM 
        `pictures`,
        (SELECT @prec_id:=0, @row:=0) s
      ORDER BY userid) s
    WHERE row<=3
    

    編集: 一度に各ユーザーに3つの画像を表示するには、最初のクエリを使用し、次のようなコードから始めます。

    <?php
    $mysqli = new mysqli("localhost", "username", "password", "test");
    
    $image_path = "../images/";
    $no_image = "../image/no_image.jpg";
    
    if(!isset($_GET['first'])){
      $first = 0;
    } else {
      $first = (int) $_GET['first'];
    }
    
    if ($stmt = $mysqli->prepare("SELECT p1.userID, p1.picture as pic1, p2.picture as pic2, p3.picture as pic3
    FROM
      pictures p1 left join pictures p2
      on p1.userID=p2.userID and p1.picture<>p2.picture
      left join pictures p3
      on p1.userID=p3.userID and p1.picture<>p3.picture and p2.picture<>p3.picture
    GROUP BY p1.userID
    LIMIT ?,1")) {
    
        $stmt->bind_param("i", $first); 
        $stmt->execute();
        $stmt->bind_result($user, $pic1, $pic2, $pic3);
        $stmt->fetch();
        $stmt->close();
    }
    $mysqli->close();
    ?>
    <div style="position:absolute; top:50px; left:100px; width:800px; text-align: center;">
      <img src="<?PHP echo (isset($pic1) ? $image_path.$pic1 : $no_image); ?>" width="176px" height="197px">
      <img src="<?PHP echo (isset($pic2) ? $image_path.$pic2 : $no_image); ?>" width="176px" height="197px">
      <img src="<?PHP echo (isset($pic3) ? $image_path.$pic3 : $no_image); ?>" width="176px" height="197px">
    </div>
    

    (改善されましたが、最初から始めることができます。mysqlの代わりにmysqliを使用しています)




    1. MySQLでの複数のカテゴリの合計の実行

    2. MySQL:すべての属性がリストされている製品を入手する

    3. データベースへの接続エラー:(クラスorg.gjt.mm.mysql.Driverを使用)ステートメント(1)に開いているカーソルがありません

    4. HikariCP接続プールがJavaで機能しているかどうかを確認する方法は?