Не знам дали има по-добро решение, но мисля, че можете да използвате това:
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
Това ще избере три изображения за всеки потребител. Ако даден потребител има по-малко от три изображения, той ще покаже нули, ако има повече, той избира три между всички тях.
Алтернатива, която показва три изображения, всяко в различен ред, е тази заявка, която използва променливи:
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
РЕДАКТИРАНЕ: за да покажа три изображения за всеки потребител наведнъж, бих използвал първата си заявка и бих започнал с код като този:
<?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>
(подобрен е, но можете да започнете с него. Използвам mysqli вместо mysql)