在三个表之间进行MySQL查询(也具有ORDER和LIMIT)

时间:2019-07-03 20:19:49

标签: mysql sql database

这是我的表结构:

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



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



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

锻炼表是一个多形的表,但是就在该点之外。

我需要做的是这个MySQL查询:

  

显示最后5个LiveTraining的所有评论,结果将显示两列:一个带有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 个答案:

答案 0 :(得分:4)

您似乎正在将反馈加入到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的结果