mysql在同一个表中返回前一个和下一个子查询中的多个列
问题描述:
我试图编写一个mysql查询,该查询返回单行中给定行的字段,以及匹配行中的几个字段“之前”的位置,以及“下一个”位置的相同字段。我在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`
它的工作原理,但只给了我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的理解并不让我知道为什么这是肯定的),并在我的情况下,它使执行至少两次没有它一样快。
为什么你不只是3行?我的意思是3个查询...或者像这样使用'UNION':http://stackoverflow.com/a/20849223/2737474 – 2014-10-30 21:00:49
@CharlesRojas,这对我的情况如何?我尝试了显而易见的方法,但那并不奏效。 – insaner 2014-10-30 21:27:24
我检查了文档,不'UNION'返回结果作为不同的行?而不是在同一行?如果可能的话,我希望我的结果在同一行。 – insaner 2014-10-30 21:38:12