这是我的表结构:
|----------------|
| 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),等等。所有这些都没有成功。
最理想的查询方法是什么?
答案 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
的结果