是否可以在SQL中的SELECT中合并?

时间:2011-12-03 22:48:06

标签: mysql sql database select merge

假设我想从名为messages的表中检索100条记录,我想通过以下方式获取它们:

1st message
100th message
2nd message
99th message
3rd message
98th message
(...)

有没有办法有效地?什么是适当的查询? 或者我应该查询选择前50个,查询选择最后50个然后合并结果?

3 个答案:

答案 0 :(得分:2)

如果您的ID是一系列数字,请尝试:

第一

SET @half = (SELECT MAX(id) FROM messages)/2;

然后

SELECT * FROM `messages` ORDER BY (IF(id<@half,@half*2-id,id-1)) DESC,id ASC;

答案 1 :(得分:0)

重点是创建两个虚拟列“serie_order”(变体)和“serie”(常量),您将在数据的两个部分上使用(您必须将数据分成两部分)。

SELECT * FROM (
  SELECT 1 as serie, message_id AS serie_order , *  FROM
   (SELECT message_id FROM messages ) as part_up
UNION 
  SELECT 2 as serie, 101-message_id  as serie_order, * FROM
   (SELECT message_id FROM messages) as part_down
) AS world

ORDER BY serie_order ASC, serie ASC
LIMIT 100

答案 2 :(得分:0)

set @rank:=0; 

select id from 
(select id, @rank:=(coalesce(@rank, 0)+1) as new_order 
 from a_table 
 order by some_column limit 100) as ordering
order by if (new_order<=50, new_order-1, abs(100-new_order)) asc;