Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Zeigen Sie drei Bilder von jedem Benutzer

Ich weiß nicht, ob es eine bessere Lösung gibt, aber ich denke, Sie könnten diese verwenden:

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

Dadurch werden drei Bilder für jeden Benutzer ausgewählt. Wenn ein Benutzer weniger als drei Bilder hat, werden Nullen angezeigt, wenn er mehr hat, wählt er drei aus allen aus.

Eine Alternative, die jeweils drei Bilder in einer anderen Zeile anzeigt, ist diese Abfrage, die Variablen verwendet:

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

BEARBEITEN: Um drei Bilder für jeden Benutzer gleichzeitig anzuzeigen, würde ich meine erste Abfrage verwenden und mit einem Code wie diesem beginnen:

<?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>

(es wurde verbessert, aber man könnte damit anfangen. Ich benutze mysqli statt mysql)