Как выбрать фотографию из таблицы фотографий для каждого поста по запросу в MySQL - PullRequest
0 голосов
/ 11 октября 2018

У меня есть две таблицы. Я хочу показать одну фотографию для каждого сообщения, но когда запрос на запуск показывает сообщение для каждой фотографии

Таблица фотографий:

+------------------------------------------------------------+
|  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_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      |
+-----------------------------+

У меня 6 сообщений в таблице сообщенийи я хочу получить одну фотографию для каждого сообщения, но мой результат показывает сообщение по количеству фотографий

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Если вы хотите, чтобы все сообщения были хотя бы с одной фотографией (я не знаю, какая именно).Итак, я бы сделал 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
                     );
0 голосов
/ 11 октября 2018

Вы можете использовать group by.Поскольку вы не определили, какую фотографию использовать в случае нескольких фотографий для сообщения, мы можем получить 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 
...