如何通过在 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
);
我有两张 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
);