sql >> Database >  >> RDS >> Mysql

Toon drie afbeeldingen van elke gebruiker

Ik weet niet of er een betere oplossing is, maar ik denk dat je deze zou kunnen gebruiken:

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

Dit selecteert drie afbeeldingen voor elke gebruiker. Als een gebruiker minder dan drie afbeeldingen heeft, toont hij nulls, als hij er meer heeft, kiest hij er drie.

Een alternatief, dat drie afbeeldingen in een andere rij toont, is deze query die gebruik maakt van variabelen:

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

BEWERKEN: om drie afbeeldingen voor elke gebruiker tegelijk te tonen, zou ik mijn eerste zoekopdracht gebruiken, en ik zou beginnen met een code zoals deze:

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

(het is verbeterd, maar je zou ermee kunnen beginnen. Ik gebruik mysqli in plaats van mysql)




  1. Hoe maak ik een lijst van alle tabellen in een schema in Oracle SQL?

  2. Hoe krijg ik volledige offline functionaliteit in een web-app met PostgreSQL-database?

  3. String naar joda LocalDate in de notatie dd-MMM-yy

  4. Hoe een ingevoegde waarde voor trigger te krijgen