Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Hiển thị ba hình ảnh từ mỗi người dùng

Tôi không biết có giải pháp nào tốt hơn không, nhưng tôi nghĩ bạn có thể sử dụng cách này:

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

Thao tác này sẽ chọn ba hình ảnh cho mỗi người dùng. Nếu người dùng có ít hơn ba hình ảnh, nó sẽ hiển thị rỗng, nếu có nhiều hơn, nó sẽ chọn ba hình ảnh trong số tất cả chúng.

Một giải pháp thay thế, hiển thị ba hình ảnh, mỗi hình ảnh trong một hàng khác nhau, là truy vấn này sử dụng các biến:

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

CHỈNH SỬA: để hiển thị ba hình ảnh cho mỗi người dùng tại một thời điểm, tôi sẽ sử dụng truy vấn đầu tiên của mình và tôi sẽ bắt đầu bằng một số mã như sau:

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

(nó đã được cải thiện, nhưng bạn có thể bắt đầu với nó. Tôi đang sử dụng mysqli thay vì mysql)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chuyển đổi truy vấn này cho hùng hồn

  2. Cách cải thiện hiệu suất INSERT trên một bảng MySQL rất lớn

  3. SQL tách các giá trị thành nhiều hàng

  4. mysql cte. sử dụng với và chèn nó cảnh báo lỗi cú pháp

  5. SQLAlchemy JSON dưới dạng blob / text