Visa ett inlägg
Oläst 2010-12-18, 03:52 #7
aelanders avatar
aelander aelander är inte uppkopplad
Medlem
 
Reg.datum: Dec 2004
Inlägg: 146
aelander aelander är inte uppkopplad
Medlem
aelanders avatar
 
Reg.datum: Dec 2004
Inlägg: 146
Tycker inte om när tabeller och fält har samma namn. Det blir förvillande (det är väl åldern), men jag gör ett försök ändå.

Skapa tabellerna:
Kod:
create table Person (
  Id int unsigned not null auto_increment primary key,
  Name int unsigned not null,
  Age tinyint unsigned default null
) engine=innodb;

Kod:
create table Name (
  Id int unsigned not null auto_increment primary key,
  Name varchar(255) not null ,
  unique key Name_unique (Name)
) engine = innodb default charset=latin1;
Skapa proceduren.
Kod:
delimiter //

create procedure insertName(Namn tinytext)
begin
  declare chk int default 0;
  select count(*) from Name where Name = Namn into chk;
  if chk = 0 then
    insert into Name (Name) values (Namn);
    insert into Person (Name) values (last_insert_id());
  end if;
end
//

delimiter ;

Lite kommentarer till proceduren.

Kollar om Namn finns i tabell Name, dvs räknar hur många Namn det finns i tabellen.
Kan ge resultat 0 eller 1.
Kod:
select count(*) from Name where Name = Namn into chk;
Om INTE så lägg dit den.
Ta Id:et på posten stoppa in i tabellen Person
Kod:
  if chk = 0 then
    insert into Name (Name) values (Namn);
    insert into Person (Name) values (last_insert_id());
  end if;
Anropa med
Kod:
CALL insertName('Nisse Hult');
CALL insertName('Anders Borg');
CALL insertName('Barak Obama');
Prova att anropa igen med och upptäck att ingenting händer.
Kod:
CALL insertName('Nisse Hult');

Var det så du villa ha det?





·

Senast redigerad av aelander den 2010-12-18 klockan 03:55
aelander är inte uppkopplad   Svara med citatSvara med citat