如何在考虑SQL中的另一列的情况下选择列中的下一个可用值?

时间:2016-08-03 16:03:29

标签: mysql

我有以下SQL表:

let tempScale: CGFloat = 3.0
tempShape.scale = SCNVector3(tempScale, tempScale, tempScale)
// grow from 1 to tempScale, then back to 1
let grow = SCNAction.scaleTo(tempScale, duration: 1)
let shrink = SCNAction.scaleTo(1, duration: 1)
let sequence = SCNAction.sequence([grow, shrink])
firstShape.run(SCNAction.repeatForever(sequence))

我想要的是根据“btype”逐渐增加“world”列中的值,例如每一行在“world”列中以值0开头 因为它是第一次插入“btype”列中的这个值,我想要的是检查是否已经插入了“btype”,以便“world”列不再假定值为0但是等等... 我想要实现的是,不能有两行共享同一个“btype”具有相同的“世界”,“btype”可以是相同但不是“世界”,它必须是不同的,我想要 它逐渐增加。

我该如何做这件事?

2 个答案:

答案 0 :(得分:1)

E.g:

DROP TABLE IF EXISTS my_table;

CREATE TABLE my_table
(bid INT NOT NULL PRIMARY KEY
,btype INT NOT NULL
);

INSERT INTO my_table VALUES
( 1,1),
( 2,4),
( 5,5),
( 3,1),
( 4,2),
( 6,3),
( 7,2),
( 8,1),
( 9,2),
(10,1);

SELECT bid
     , btype
     , i 
  FROM 
     ( SELECT x.*
            , CASE WHEN @prev=btype THEN @i:=@i+1 ELSE @i:=0 END i
            , @prev:=btype prev 
         FROM my_table x
            ,( SELECT @i:=0,@prev:=null) vars 
        ORDER 
           BY btype,bid 
     ) n 
 ORDER 
    BY bid;
+-----+-------+------+
| bid | btype | i    |
+-----+-------+------+
|   1 |     1 |    0 |
|   2 |     4 |    0 |
|   3 |     1 |    1 |
|   4 |     2 |    0 |
|   5 |     5 |    0 |
|   6 |     3 |    0 |
|   7 |     2 |    1 |
|   8 |     1 |    2 |
|   9 |     2 |    2 |
|  10 |     1 |    3 |
+-----+-------+------+

答案 1 :(得分:0)

我通常不会做这样的查询,所以我无法肯定地说,但之类的这应该可以解决这个问题。

@try
{
     NSError *error;
NSString *url_string = [NSString stringWithFormat: @"http://Share/scripts/newjson.json"];
///Dummy URL
NSData *data = [NSData dataWithContentsOfURL: [NSURL URLWithString:url_string]];
NSMutableArray *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
NSLog(@"json: %@", json);

}
@catch (NSException *e)
{
    NSLog(@"Internet not enabled");
    //something went wrong
    //populate the NSError object so it can be accessed
}

您甚至可以在传统的INSERT ... VALUES值列表中包含第3个选择表达式;但就像我说的那样,我通常不会这样做。 (我喜欢在插入之前首先检查的明显少数;但不能替代适当的唯一性约束。)