我有如下表:
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
答案 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;
答案 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
<强>解释强>
首先根据type
和image
对结果集进行排序。
现在为每个上面排序的行分配一个行号。每次发现新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 |