如何通过在 MySQL 中查询 select 每个 post 的照片 table 中的一张照片

How to select a photo from the photo table for each post by query in MySQL

我有两张 table 我想为每张 post 显示一张照片,但是当 运行 查询为每张照片显示 post 时

照片 table :

+------------------------------------------------------------+
|  photo_id   |    post_id    |    photo_name                |
+------------------------------------------------------------+
|     1       |        1      |    flower.jpg                |
+------------------------------------------------------------+
|     2       |        1      |    book.jpg                  |
+------------------------------------------------------------+
|     3       |        2      |    pen.jpg                   |
+------------------------------------------------------------+
|     4       |        3      |    man.jpg                   |
+------------------------------------------------------------+
|     5       |        3      |    women.jpg                 |
+------------------------------------------------------------+
|     6       |        3      |    boy.jpg                   |
+------------------------------------------------------------+

Post table :

+--------------------------------+
|  post_id    |   post_title     |
+--------------------------------+
|     1       |   flower         |
+--------------------------------+
|     2       |   book           |
+--------------------------------+
|     3       |   pen            |
+--------------------------------+
|     4       |   man            |
+--------------------------------+
|     5       |   women          |
+--------------------------------+
|     6       |   boy            |
+--------------------------------+

使用流动 SQL 查询和 INNER JOIN 但我的结果显示如下:

SELECT
Photo.photo_name,
Post.post_title
FROM Photo
INNER JOIN Post
ON Photo.post_id = Post.post_id 
ORDER BY Post.post_id 

执行后查询结果:

+-----------------------------+
|  post_title |   photo_name  |
+-----------------------------+
|     flower  |  flower.jpg   |
+-----------------------------+
|     flower  |  flower.jpg   |
+-----------------------------+
|     book    |  book.jpg     |
+-----------------------------+
|     book    |  book.jpg     |
+-----------------------------+
|     pen     |  pen.jpg      |
+-----------------------------+
|     pen     |  pen.jpg      |
+-----------------------------+
|     man     |  man.jpg      |
+-----------------------------+
|     man     |  man.jpg      |
+-----------------------------+
|     women   |  women.jpg    |
+-----------------------------+
|     women   |  women.jpg    |
+-----------------------------+
|     boy     |  boy.jpg      |
+-----------------------------+
|     boy     |  boy.jpg      |
+-----------------------------+

我在 post table 中有 6 post,我想为每个 post 拍一张照片,但我的结果显示 post 照片计数

您可以使用 group by。由于您尚未定义,如果 post 有多张照片,我们可以为 post 获取 Max() 张照片:

SELECT
MAX(Photo.photo_name),
Post.post_title
FROM Photo
INNER JOIN Post
ON Photo.post_id = Post.post_id 
GROUP BY Post.post_id, Post.post_title 
ORDER BY Post.post_id 

假设您想要所有 post 至少有一张照片(我不知道是哪一张照片)。所以,我会用子查询做 LEFT JOIN :

SELECT pst.post_title, p.photo_name
FROM Post pst LEFT JOIN 
     Photo p
     ON p.post_id = pst.post_id AND 
        p.photo_id = (SELECT MAX(p1.photo_id)
                      FROM Photo p1
                      WHERE p1.post_id = p.post_id
                     );