MySQL Query между тремя таблицами (с также ORDER и LIMIT) - PullRequest
1 голос
/ 03 июля 2019

Это моя структура таблицы:

|----------------|
|    Feedback    |
|----------------|
|id              |
|workout_id      |
|comment (string)|
|----------------|



|----------------|
|    Workout     |
|----------------|
|id              |
|trainable_id    |
|----------------|



|----------------|
|  LiveTraining  |
|----------------|
|id              |
|title (string)  |
|----------------|

Таблица тренировок является полиморфной, но это не относится к делу.

Что мне нужно сделатьэто MySQL Query:

Показать ВСЕ комментарии за последние 5 LiveTrainings, где результат принесет два столбца: один с заголовком LiveTraining и другой с ответом.

Это должен быть ожидаемый ответ:

|---------|---------|
|  Title  | Comment |
|---------|---------|
| Lorem 1 | Lorem 2 |
| Lorem 1 | Lorem 3 |
| Lorem 4 | Lorem 5 |
| Lorem 6 | Lorem 7 |
|---------|---------|

Я пытался сделать что-то подобное (без успеха - пустой ответ):

SELECT live_trainings.title, feedbacks.*
FROM workouts
INNER JOIN (select * FROM live_trainings order by id desc limit 5) live_trainings ON workouts.trainable_id = live_trainings.id
INNER JOIN feedbacks ON live_trainings.id = feedbacks.workout_id

Также пробовал некоторые UNION ALL решения, некоторые SELECT (SELECT) , среди прочих ... все безуспешно.


ОЧЕНЬ ВАЖНО: должно быть одноРешение для запроса, вообще без функций или процедур: (

Каким был бы идеальный запрос для этой проблемы?

1 Ответ

4 голосов
/ 03 июля 2019

Похоже, вы присоединяете отзывы к live_trainings вместо тренировок.Поэтому попробуйте:

SELECT live_trainings.title, feedbacks.*
FROM workouts
INNER JOIN (select * FROM live_trainings order by id desc limit 5) live_trainings ON workouts.trainable_id = live_trainings.id
INNER JOIN feedbacks ON workouts.id = feedbacks.workout_id

Если проблема не устранена, измените значение INNER JOIN на LEFT JOIN и найдите пустые поля.Если таблицы большие, вам может понадобиться LIMIT результат

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...