如何在Mysql中以同步顺序获取数据

时间:2016-09-08 07:15:49

标签: mysql

我有如下表:

id----image----type  
1-----a.png----1  
2-----b.png----1  
3-----c.png----2  
4-----d.png----1  
5-----e.png----2  

现在我想按以下顺序获取数据(首先输入1然后输入2然后输入1,依此类推):

1-----a.png----1  
3-----c.png----2   
2-----b.png----1   
5-----e.png----2  
4-----d.png----1   

那么如何实现呢?

到目前为止,我有以下查询:

SELECT 
 * 
FROM  `table` 
WHERE (TYPE =1 OR TYPE =2)
ORDER BY TYPE 

2 个答案:

答案 0 :(得分:2)

E.g

Select x.* from mytable x 
join mytable y on y.type =x.type and y.id <= x.id 
group by x.id 
order by count(*),x.type

或更快 - 我认为@ 1000111试图获得...

SELECT x.id
     , x.image
     , x.type
  FROM
      ( SELECT a.*
             , CASE WHEN @prev = type THEN @i:=@i+1 ELSE @i:=1 END rank 
             , @prev := type
          FROM your_table a
             , (SELECT @i:=0, @prev:=null) vars
         ORDER 
            BY type
             , id
      ) x
  ORDER  
     BY rank
      , type;

http://sqlfiddle.com/#!9/3e27c/8

答案 1 :(得分:1)

我想你可以在MySQL user defined variables

的帮助下实现这一目标
SELECT 
t.id,
t.image,
t.type
FROM 
(
    SELECT 
     id,
     image,
     type ,
    IF(@sameType = type, @rn := @rn + 1,
        IF(@sameType := type, @rn := 1, @rn := 1)
    ) AS rowNumber
    FROM your_table 
    CROSS JOIN (SELECT @sameType := 0, @rn := 0) var
    ORDER BY type , image
) AS t
ORDER BY t.rowNumber

See Demo

<强>解释

首先根据typeimage对结果集进行排序。

现在为每个上面排序的行分配一个行号。每次发现新1时,行号从type开始,否则会增加。

这样你就会得到一张表t

现在,如果您只是根据t.rowNumber重新订购结果,那么您将获得每种类型的第一行,然后是第二行,依此类推。

<强>输出:

对给定的示例输入运行上述查询,您将获得如下输出:

| id | image | type |
|----|-------|------|
|  1 | a.png |    1 |
|  3 | c.png |    2 |
|  2 | b.png |    1 |
|  5 | e.png |    2 |
|  4 | d.png |    1 |