2014-08-31 15 views
0

这看起来应该是相当普遍的事情,所以这可能就像为我描述的内容提供正确的词汇表一样简单。重复运行旁边的MySQL结果中的数字

我想返回查询结果和一列我想回到的1,2的重复数序列,3

所需的结果集:

Num Result 
--------------- 
1  result1 
2  result2 
3  result3 
1  result4 
2  result5 

现在我可以返回基本的三个数字的基本列表:

SELECT @ROW := @ROW + 1 AS ROW FROM 'use any table with data in it' t join (SELECT @ROW := 0) t2 LIMIT 3 

我只是找不到一种方法将这与我的查询混合,以返回我想要的结果。我想出的最好的方法是返回一个重复的1,2,3,但重复查询每个数字中的每个项目(如您所期望的)。

Num Result 
--------------- 
1  result1 
2  result1 
3  result1 
1  result2 
2  result2 

有关如何实现此目的的任何想法?

编辑:

CREATE TABLE Results (Result varchar(10)); 
INSERT INTO Results (`Result`) VALUES ('result1'); 
INSERT INTO Results (`Result`) VALUES ('result2'); 
INSERT INTO Results (`Result`) VALUES ('result3'); 
INSERT INTO Results (`Result`) VALUES ('result4'); 
INSERT INTO Results (`Result`) VALUES ('result5'); 

CREATE TABLE Randoms (Random varchar(10)); 
INSERT INTO Randoms (`Random`) VALUES ('whatever1'); 
INSERT INTO Randoms (`Random`) VALUES ('whatever2'); 
INSERT INTO Randoms (`Random`) VALUES ('whatever3'); 

--Initial Query 
SELECT Result 

    FROM Results 

    ORDER BY Result ASC; 


--Closest I've come (not close enough) 
SELECT b.Num, 
     a.Result 

    FROM Results a, 
     (SELECT @ROW := @ROW + 1 AS Num FROM Randoms t join (SELECT @ROW := 0) t2 LIMIT 3) b 

    ORDER BY a.Result ASC; 
+0

如果您愿意,请考虑遵循以下简单的两步操作步骤:1.如果您尚未这样做,请提供适当的DDL(和/或sqlfiddle),以便我们可以更轻松地复制问题。 2.如果您尚未这样做,请提供与步骤1中提供的信息相对应的所需结果集。 – Strawberry 2014-08-31 12:05:59

+0

在过去的45分钟内,我了解到我对SQLfiddle有着单一的仇恨。作为替代方案,我还包括重新创建我希望纠正的失败场景所需的SQL。希望这足以解决问题。我希望我的原始预期结果集足够了。 – ashcanschool 2014-08-31 12:53:29

+0

什么是randoms位? – Strawberry 2014-08-31 13:18:23

回答

2

我认为你可以做到这一点...

SELECT MOD(i,3)+1 
    , result 
    FROM 
    (SELECT @i:[email protected]+1 i 
      , result 
     FROM results 
      , (SELECT @i:=2) vals 
     ORDER 
      BY result 
    ) x; 
+0

我刚看到下面的IF()解决方案,在我的脑海中肯定比较简单,但是你的答案是第一个工作,现在已经构建到我的平台中。感谢您的患者。 – ashcanschool 2014-08-31 14:02:57

0

我认为你需要使用MOD函数是这样的:

SET @ROW = 0; 
SELECT 
    @ROW := @ROW +1 as RowNum, 
    (@ROW + 2) % 3 + 1 as Result 
FROM MyTable 

http://sqlfiddle.com/#!2/aa299/7

+0

我不确定你是如何使用这个SQL的。如果没有定义ROW,它将无法独立运行,我似乎无法找到一种方法将其融入到我目前使用的工作中。如果我扔了一个表,然后加入(SELECT @ROW:= 0),我只是重复了3号。 – ashcanschool 2014-08-31 12:56:45

+0

我已经更新了答案 - http://sqlfiddle.com/#!2/aa299/7 – Bulat 2014-08-31 13:17:27

+0

我无法得到这个工作。虽然这可能源于我掌握数学的能力非常有限。它只是不断重复我的数字3。 – ashcanschool 2014-08-31 14:06:49

1

虽然你可以这样做有mod(),我觉得一个if()更简单:

SELECT @row := if(@row < 3, @row + 1, 1) as Num, 
     a.Result 
FROM Results a CROSS JOIN 
    (SELECT @row := 0) vars 
ORDER BY a.Result ASC; 

我不知道是什么表randoms是。这似乎没有必要的问题。 Here是一个SQL小提琴。

+0

虽然你的答案是第一个,我不必坐下来用纸理解(MOD从来不是我的强项),我已经接受了上面的答案。希望最后的投票有点帮助。随机数可以让数字生成器的rownums工作,但基本上我是用那个树叫出错误的树。 – ashcanschool 2014-08-31 14:05:22