如何插入名次字段数据?

在一张表有2个字段,一个是分数,一个是名次,分数是用户通过JSP网页输入的,现在要在名次段中根据分数的高低来输入名次,该怎么做?
---------------------------------------------------------------

Table structure for table 'ta'

CREATE TABLE ta (
id tinyint(3) unsigned NOT NULL default '0',
score tinyint(4) NOT NULL default '0',
PRIMARY KEY (id),
KEY name (score)
) TYPE=MyISAM CHARSET=latin1;

Table structure for table 'tb'

CREATE TABLE tb (
id tinyint(3) unsigned NOT NULL default '0',
score tinyint(4) NOT NULL default '0',
score_no tinyint(4) default NULL,
PRIMARY KEY (id),
KEY name (score)
) TYPE=MyISAM CHARSET=latin1;

Dumping data for table 'ta'

INSERT INTO ta VALUES("1", "67");
INSERT INTO ta VALUES("2", "89");
INSERT INTO ta VALUES("3", "90");
INSERT INTO ta VALUES("4", "78");
INSERT INTO ta VALUES("5", "89");
INSERT INTO ta VALUES("6", "87");

mysql> SET @id = 0;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT id,score,@id :=@id+1 AS score_no FROM ta ORDER BY score;
+----+-------+----------+
¦ id ¦ score ¦ score_no ¦
+----+-------+----------+
¦ 1 ¦ 67 ¦ 1 ¦
¦ 4 ¦ 78 ¦ 2 ¦
¦ 6 ¦ 87 ¦ 3 ¦
¦ 2 ¦ 89 ¦ 4 ¦
¦ 5 ¦ 89 ¦ 5 ¦
¦ 3 ¦ 90 ¦ 6 ¦
+----+-------+----------+
6 rows in set (0.00 sec)

INSERT INTO tb SELECT id,score,@id :=@id+1 AS score_no FROM ta ORDER BY score;

在网页中输入记录保存在 tA 表中,
然后对其处理将结果插入到结果表中,

INSERT INTO 结果表 SELECT ........

==========================================

6.1.4 用户变量

MySQL 支持连接特定(connection-specific)的用户变量,用 @variablename 句法表示。一个变量名可以由当前字符集中包含的文字与数字字符以及 “_”、“$” 和 “.” 组成。缺少的字符集为 ISO-8859-1 Latin1;这可以通过改变 mysqld 的--default-character-set 的选项来改变。查看章节 4.6.1 用于数据和排序的字符集。

变量不必被初始化。缺省地,他们的值为 NULL 并可以存储一个整数、实数或字符串值。当连接线程退出时,这个线程的所有变量将会自动地被释放。

你可以通过 SET 句法来设置一个变量:

SET @variable= { integer expression ¦ real expression ¦ string expression }
[,@variable= ...].

在语句中除了 SET 之外还可以直接为一个变量赋值。然而在这各情况下,赋值操作符为 := 而不是 =,因为 = 在非 SET 语句中是用于比较的:

mysql> SELECT @t1:=(@t2:=1)+@t3:=4,@t1,@t2,@t3;
+----------------------+------+------+------+
¦ @t1:=(@t2:=1)+@t3:=4 ¦ @t1 ¦ @t2 ¦ @t3 ¦
+----------------------+------+------+------+
¦ 5 ¦ 5 ¦ 1 ¦ 4 ¦
+----------------------+------+------+------+

用户变量可以用于表达式所允许的任何地方。注意,这在数字必须明确指定的语境中并不适用,例如,在 SELECT 的 LIMIT 子句中或一个 LOAD DATA 语句的 IGNORE number LINES 的子句中。

注意:在一个 SELECT 语句中,各个表达式只有在它被送到客户端时才能被求值。这就意味着,在 HAVING、GROUP BY 或 ORDER BY 子句中,你不能使用一个包含在 SELECT 部份所设置变量的表达式。例如:下面的语句将不会按预期的运作:

mysql> SELECT (@aa:=id) AS a, (@aa+3) AS b FROM table_name HAVING b=5;

原因是因为 @aa 不会是当前行的值,而是前一个符合条件的行的 id 值。

规则就是在同一语句中决不赋值 和 使用同一个变量。

Published At
Categories with 数据库类
Tagged with
comments powered by Disqus