如何为每个玩家MySQL创建唯一索引?

时间:2016-04-26 20:09:28

标签: mysql sql

我有一张这样的桌子!

 T1       
 Name Surname     Team
 John   Fire      Team1
 Mike   Ice       Team2
 Don    Grass     Team3
 John   Fire      Team4
 Jake   Finger    Team1

我想创建添加到此名为ID的表列中。

ID包括:

'姓名' +

的第一个字母

'姓氏的第一个字母' +

' - ' +

如果之前有相同的第一个字母,则数字自动增加!

看起来像这样!

 T1       
   ID   Name   Surname     Team
  JF-1  John    Fire       Team1
  MI-1  Mike     Ice       Team2
  DG-1  Don    Grass       Team3
  JF-1  John    Fire       Team4
  JF-2  Jake    Finger     Team1

我需要在此代码中添加什么内容?

#LAST TRY

create table T1 (
Name varchar(45),
Surname varchar(45),
Team varchar(45));

insert into T1(Name,Surname,Team) values ( 'John','Fire','Team1'),   ('Mike','Ice','Team2'),
('Don','Grass','Team3'),('John','Fire','Team4'),('Jake','Finger','Team1');

select * from T1;

3 个答案:

答案 0 :(得分:2)

看起来你所获得的表格是几个实体的集合。

实体关系建模是数据库设计的

实体是可以唯一标识的人,地点,事物,概念或事件,对企业很重要,我们可以存储有关的信息。

确定实体之间的关系和基数。

“玩家”是零,一个或多个“团队”的成员 “团队”由零,一个“玩家”组成

确定实体的候选键。确定哪些属性属于哪些实体。

“玩家”有一个“出生日期”。 “玩家”有一个“名字”和一个“姓氏”。

在实施物理设计之前,您应该努力将数据模型设置为第三范式。 (在执行所需的地方进行非规范化,但不要跳过先达到3NF的步骤。在实施之前。)

一旦您的模型在3NF中,然后提出一个实现,从每个实体的单独表开始。

作为播放器/人物实体的示例表定义,添加代理键作为主键:

create table player 
( id         int unsigned not null primary key auto_increment comment 'PK'
, surname    varchar(30)  comment 'last name'
, givname    varchar(30)  comment 'first name'
, dob        date         comment 'date of birth'
, UNIQUE KEY player_UX1 (surname, givname)
) engine=innodb
;
create table team
( id         int unsigned not null primary key auto_increment comment 'PK'
, team_name  varchar(50)
, mascot     varchar(100)
, ...
, UNIQUE KEY team_UX1 (team_name)
) engine=innodb;

忽略任何时间要求,将“player”和“team”之间的多对多关系实现为 relationship 表,并使用引用每个表的外键...

create table current_team_member
( team_id      int unsigned not null comment 'FK, ref team.id'
, player_id    int unsigned not null comment 'FK, ref player.id'
, date_joined  date
, ...
, PRIMARY KEY (team_id, player_id, ... )
, CONSTRAINT FK_current_team_member_team
    FOREIGN KEY (team_id)  REFERENCES team(id)
, CONSTRAINT FK_current_team_member_player
    FOREIGN KEY (player_id) REFERENCES player(id) 
) engine=innodb;
INSERT INTO player (givname, surname, dob, ...)
SELECT ...        AS givname
     , ...        AS surname
     , MIN(...)   AS dob
  FROM conglomeration_of_a_jumbled_mess t 
 GROUP BY givname, surname
 ORDER BY givname, surname
 ;

INSERT INTO team (team_name, ...
SELECT t.team_name 
     , ...
  FROM conglomeration_of_a_jumbled_mess t 
 GROUP BY t.team_name
 ORDER BY t.team_name
 ;

答案 1 :(得分:0)

创建ID的基本方法:

<?php
class Filter extends Threaded {

    public function __construct(string $img, array $filters = [], string $out) {
        $this->img = $img;
        $this->filters = $filters;
        $this->out = $out;
    }

    public function run() {
        $image = imagecreatefromjpeg($this->img);

        if (!is_resource($image)) {
            throw new \RuntimeException(
                sprintf(
                    "could not create image resource from %s", $this->img));
        }

        foreach ($this->filters as $filter) {
            imagefilter($image, ...$filter);
        }

        imagejpeg($image, 
            sprintf("%s/%s", 
                $this->out, basename($this->img)));
        imagedestroy($image);
    }

    private $img;
    private $filters;
    private $out;
}

$pool = new Pool(16);

foreach (glob("/path/to/*.JPG") as $image) {
    $pool->submit(new Filter(
        $image, [
            [IMG_FILTER_GRAYSCALE],
            [IMG_FILTER_COLORIZE, 100, 50, 0]
        ],
        "/tmp/dump"));
}

$pool->shutdown();
?>

将检查语法并展开。

方法:从名字中选择第一个字母,从第二个名字中选择第二个字母,然后根据姓名和姓氏的分组,确定要插入的数字。

编辑:  试试这个作为MySQL的实现。

import java.util.Scanner;
public class BodyMassIndex {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    int pounds =0;      
    int feet = 0;
    int inches = 0;
    double heightMeters = ((feet * 12) + inches) * .0254;
    double mass = pounds / 2.2; 
    Scanner keyboard = new Scanner(System.in);

    System.out.println("Enter your weight in pounds");
    pounds = keyboard.nextInt();
    System.out.println("Enter how many feet you are");
    feet = keyboard.nextInt();
    System.out.println("Enter how many inches after feet");
    inches = keyboard.nextInt();
    double bmi = mass / (heightMeters * heightMeters);

    System.out.println(mass);
    System.out.println(bmi);

    if(bmi < 18.5){
        System.out.println("Underweight");
    }
    else if ((bmi >= 18.5) && (bmi < 25)){
        System.out.println("Normal weight");
    }
    else if ((bmi >= 25) && (bmi < 30))
        System.out.println("Above weight");
    else
        System.out.println("Obese");

    }

}

唷!! http://www.mysqltutorial.org/mysql-row_number/是参考链接。但真的是MySQL !!为什么你不能给我们基本的分析功能!!

小提琴:http://sqlfiddle.com/#!2/edb8b2/7

答案 2 :(得分:-2)

根据您发布的新信息,您实际上并未创建包含唯一字段的表格。你正在做的是创建一个表,一个给定的人可以出现N次,因此他们需要一个对他们来说完全独特的标识符(例如,两个人具有相同的名字和姓)。如果没有合并表格,以便每个玩家只出现一次,并且在该行上枚举所有他们的团队,那么您需要在插入时简单地定义这些ID。所以,

create table T1 (
ID varchar(4),
Name varchar(45),
Surname varchar(45),
Team varchar(45));

然后修改插入内容以包含ID:

insert into T1(ID,Name,Surname,Team) values ( 'JF-1','John','Fire','Team1')

等等。