id int() auto_increasement

coke

Mitglied
hi!

also folgendes:

ich habe eine tabelle mit einer auto_increasement id

wenn ich jetzt einträge daraus lösche dann sind da aber lücken in der id (id 1 - 10 lösche 6 dann fehlt ID6)

wenn ich nun per zufall einer ID davon ausgeben will, dann kommt es vor, dass er manchmal nichts ausgibt wenn er auf die 6 kommt. gibt es ne möglichkeit die lücken mit neuen einträgen zu füllen?

oder kann man die anderen irgendwie zusammenrücken?
 
das ist normal bei diesen autowert-feldern. die kann man auch so ohne weiteres nicht mehr ändern.
im allgemeinen ist die verwendung von auto_increment als primärschlüssel nicht so günstig, weil man da nie absolut sicher weiss, welcher wert eingetragen wird.
mach dir lieber die mühe und berechne deine primärschlüssel selber - damit bist du auf der sicheren seite.

allerdings ist das nachträgliche ändern von selbstvergebenen primärschlüsseln auch nicht ganz ohne, wenn die tabelle in beziehung zu anderen tabellen steht. du könntest zwar in einer schleife alle felder wieder durchnummerieren, aber unter umständen reisst das alles auseinander.
 
wenn ich dann aber ne zufallszahl so bekomme, dass ich nicht genug einträge mehr hab die ne ID >= zufallszahl haben? hast du dazu auch ne idee?

vielleicht als maximum für zufallszahl die grösste ID - mindestanzahlangezeigtereinträge
 
ich glaube ich hab eine idee! aber dazu muss ich irgendwie die höchste id anzeigen lassen! nur wie mach ich das???

steh irgendwie derbe aufm schlauch heut ich weiss :(
 
Original geschrieben von melmager


wenn du die var $zufallid hast

dann kannst du doch so vorgehen:

select * from tabwert where id >= $zufallid limit 1

dann stören die lücken nicht

habe das jetzt so gemacht:

require ("config.php");

mysql_connect($sql_host,$sql_user,$sql_pass) OR DIE( "Connection to MySQL Server failed");
mysql_select_db($database);

$result = mysql_query("SELECT * FROM $table1 WHERE id<='$linkgenerator' LIMIT 1");

while ($data = mysql_fetch_array($result)) {
print "<a href='{$data[linkurl]}' target='blank' alt='{$data[linktext]}'>{$data[linktext]}</a>";
}

print $linkgenerator;





aber das hat leider nichts geholfen. der zeigt mir immer noch die leeren datensätze an!

wenn ich dann die id ausgebe (print $linkgenerator;) dann zeigt er mir immer noch die ID an obwohl das ja ein schon gelöschter datensatz war!
 
ok zur aufklärung :)

dein var $linkgenerator hat zb die 5
nr 5 wurde ja gelöscht also gibt der query den nächstkleinere id raus zb 4

du must natürlich dann die gefundende id
ausgeben nicht die gesuchte

also in deinem fall

statt
print $linkgenerator;
ausgabe mit
print $data['id'];
 

Neue Beiträge

Zurück