Avatar billede blackscorpion Nybegynder
23. marts 2007 - 20:46 Der er 12 kommentarer og
1 løsning

Kringlet indexserings spørgsmål.

Hej Eksperter.

Alle med bare 5 mins erfaring med MySQL ved at primær på auto_increment går slavisk fra 1 til ... ja. :D

Mit spørgsmål er så:

Er der nogen måde hvorpå man kan få den til at udfylde huller, hvis man f.eks. sletter et row med id 5, og der er 23 i tabellen, så den næste auto increment value ville være 5 og ikke 24 som den normalt gør ?

- Håber i forstår.
Avatar billede arne_v Ekspert
23. marts 2007 - 20:58 #1
ikke umiddelbart

og det er naeppe hensigtsmaessig heller
Avatar billede blackscorpion Nybegynder
23. marts 2007 - 21:04 #2
har lavet en film database til en ven, og hans kone har det med at slette film istedet for at redigere dem, så jeg har været nødsaget til nu, helt at fjerne slette funktionen.

og han bruger ID som numrerne på filmene.

så det er skam hensigtmæssigt i dette tilfælde. ;)
Avatar billede arne_v Ekspert
23. marts 2007 - 21:17 #3
en af pointerne med genererede ids er at man aldrig maa vise dem til brugerne

:-)

men naar nu landet ligger som det goer, saa er naeste spoergsmaal: har han nogle
andre tabeller med foreign keys der peger paa denne tabel ?

hvis nej saa er det lidt nemmere at opdatere id'erne saa de bliver "paene"
Avatar billede blackscorpion Nybegynder
23. marts 2007 - 21:25 #4
nej det har han ikke, eneste han sådan set leger med er selve film tabellen.

strukturen ser sådan her ud.

CREATE TABLE `movies` (
  `id` int(11) NOT NULL auto_increment,
  `title` varchar(200) character set utf8 NOT NULL,
  `genre` varchar(250) collate utf8_danish_ci NOT NULL,
  `sound` varchar(250) collate utf8_danish_ci NOT NULL default 'Danish',
  `imdb` varchar(250) collate utf8_danish_ci NOT NULL,
  `rented` int(1) NOT NULL default '0',
  `rented_by` varchar(200) collate utf8_danish_ci NOT NULL,
  PRIMARY KEY  (`title`),
  UNIQUE KEY `id` (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_danish_ci COMMENT='main movie db' AUTO_INCREMENT=278 ;
Avatar billede arne_v Ekspert
23. marts 2007 - 21:33 #5
saa kan lave et program der loeber raekkerne igennem nedefra og opdaterer feltet
og til sidste saetter naeste auto increment vaerdi
Avatar billede blackscorpion Nybegynder
23. marts 2007 - 21:35 #6
hvordan ? bruger det sammen med php (som altid. ;)
Avatar billede arne_v Ekspert
23. marts 2007 - 21:38 #7
jeg kan bixe et PHP eksempel senere
Avatar billede blackscorpion Nybegynder
23. marts 2007 - 21:39 #8
okey tak. :D

nu jeg har fat i dig, gider du så tage et hurtigt kig på : http://www.eksperten.dk/spm/769754 ?
Avatar billede arne_v Ekspert
24. marts 2007 - 00:37 #9
utestet:

$con = mysql_connect("xxxx", "xxxx", "xxxx") or die(mysql_error());
mysql_select_db("xxxx", $con) or die(mysql_error());
$rs = mysql_query("SELECT eid FROM movies ORDER BY id ASC", $con) or die(mysql_error());
$realid = 1;
while ($row = mysql_fetch_array($rs)) {
  $id = $row['id'];
  if($id > $realid) {
      mysql_query("UPDATE movies SET id = $realid WHERE id = $id") or die(mysql_error());
  }
  $realid++;
}
mysql_free_result($rs);
mysql_query("ALTER TABLE movies AUTO_INCREMENT = $realid") or die(mysql_error());
mysql_close($con);
Avatar billede arne_v Ekspert
24. marts 2007 - 00:38 #10
test lige på nogle test data først !
Avatar billede blackscorpion Nybegynder
28. marts 2007 - 17:55 #11
kan ikke lige overskue det nu her, så smid et svar så vi kan få lukket. :)
Avatar billede arne_v Ekspert
28. marts 2007 - 18:16 #12
ok
Avatar billede blackscorpion Nybegynder
29. marts 2007 - 16:51 #13
Tak :D
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester