我正在尝试构建一个mysql查询,该查询在一行中返回给定行的字段,以及与"上一个"位置匹配的行中的几个字段,以及"下一个"的相同字段。我是mysql的新手,但对于所有在网上搜索答案的人来说,这是我能做的最好的事情:
SELECT *,
(select id
from mytable t2
where t2.added_on < t.added_on
order by t2.added_on DESC
limit 1
) as prev_id,
(select id
from mytable t3
where t3.added_on > t.added_on
order by t3.added_on
limit 1
) as next_id FROM mytable as t ORDER BY `added_on`
这是有效的,但只给我"上一个"one_answers"下一个"的id
字段。如您所知,在子查询中使用*
(或'id', 'title'
)而不是id
会产生错误。我已经考虑过使用JOIN
和其他一些方法,但我只是没有得到它。
好吧,我想明白了,这是所有试图找到解决方案的人的解决方案。如果对你有帮助的话,一定要投赞成票。
SELECT t.*,
prev.id as prev_id,
prev.added_on as prev_added_on,
next.id as next_id,
next.added_on as next_added_on
FROM `TABLE_NAME` AS t
LEFT JOIN `TABLE_NAME` AS prev
ON prev.id =
(select id
from `TABLE_NAME` t2
where t2.added_on < t.added_on
order by t2.added_on DESC
limit 1)
LEFT JOIN `TABLE_NAME` AS next
ON next.id =
(select id
from `TABLE_NAME` t3
where t3.added_on > t.added_on
order by t3.added_on
limit 1 )
ORDER BY t.added_on DESC
最后一个ORDER BY
实际上由于某种原因使整个过程得到了极大的优化(我目前对mysql的理解并不能让我知道为什么会这样),在我的情况下,它使执行速度至少是没有它的两倍。