Auto Ingrement id laten oplopen?
Ik heb een database gemaakt waar die ik via php aan een login script heb hangen, compleet met admin panel en dergelijke. Een klein slordigheids foutje is dat als ik een user (bv. id = 3) verwijder de nieuwe user tog wordt toegevoegd met een user met 1 hoger id (id = 4). Zo komt er dus een lijst met users waar ik iets van 40 id's over sla als ik een tijdje bezig ben met verwijderen en adden. Aangezien admins van het programma het ook kunnen zien in een tabel ziet het er niet zo netjes uit, en is niet logisch in het gebruik.
Is er iets bekend over hoe je de database laat checken wat het hoogste id is en dan het id van de nieuwe user dan 1 cijfer daar boven kunt laten krijgen?
En kan ik - als ik user 4, 5, 6 en 7 heb en ik verwijder 5 en 6 - dan de andere gebruikers terug laten springen in id om het gat op te vullen?
Ik kan hier niks over vinden op internet, dus elke hulp is welkom. Thanks in advance.
Waarschijnlijk snap je de functie van een primary key nog niet helemaal, dit dient slechts om een record uniek te maken, alleen dit en niets meer.
Beginnende programmeurs weten dit vaak niet en vaak wordt de primary key daarom misbruikt. Een id zegt niets over de oudheid van een record, over het aantal records, over een volgorde. Het is puur en alleen bedoelt om een record uniek te houden.
Gewijzigd op 01/01/1970 01:00:00 door Citroen Anoniem Graag
Freek schreef op 30.05.2008 21:34:
Waarom zou je dat willen?
Waarschijnlijk snap je de functie van een primary key nog niet helemaal, dit dient slechts om een record uniek te maken, alleen dit en niets meer.
Beginnende programmeurs weten dit vaak niet en vaak wordt de primary key daarom misbruikt. Een id zegt niets over de oudheid van een record, over het aantal records, over een volgorde. Het is puur en alleen bedoelt om een record uniek te houden.
Waarschijnlijk snap je de functie van een primary key nog niet helemaal, dit dient slechts om een record uniek te maken, alleen dit en niets meer.
Beginnende programmeurs weten dit vaak niet en vaak wordt de primary key daarom misbruikt. Een id zegt niets over de oudheid van een record, over het aantal records, over een volgorde. Het is puur en alleen bedoelt om een record uniek te houden.
Zo is dat.
Dus: Afblijven!!
Je hoeft de id in de database niet per sé te gebruiken als identieficatie. Je kunt ook lid no. 1550 hebben. Dan doe je niet in je query WHERE id = 1550 (of wat het id van die persoon is), maar LIMIT 1550, 1. Hiermeer selecteer je de 1550'ste gebruiker, die kan dus bijvoorbeeld id 2000 hebben, maar dat hoef je niet te laten zien, of is dat niet wat je bedoelt?
Het is meer voor het oog. Het is dus eigenlijk wat ik wil dat ik een lijstje krijg met mijn users en deze van een user nummer kan voorzien dat zonder onderbreken oploopt, ook als ik daar tussen door wat users heb verwijderd en toegevoegd... Dit zou ik dus ook best met een ander veld kunnen doen dan mijn primary key en de primary key uit het lijstje halen, maar hoe moet ik dat dan doen?
Btw als je wilt weten hoeveel leden je hebt doe je dit:
SELECT count(id) FROM tabel
Edit:
@Jan, weer wat geleerd. Ik dacht zelf dat het niet veel uitmaakte en dat het gebruik van een sterretje vooral bedoelt was, voor minder onderhoud :P
@Jan, weer wat geleerd. Ik dacht zelf dat het niet veel uitmaakte en dat het gebruik van een sterretje vooral bedoelt was, voor minder onderhoud :P
Gewijzigd op 01/01/1970 01:00:00 door Citroen Anoniem Graag
SELECT COUNT(*) is geoptimaliseerd en sneller, als je geen WHERE gebruikt tenminste.
Mijn tip: nooit maar dan ook nooit gaan rommelen met id's. Een lidnummer zoals tommy oppert lijkt mij alleen maar voor veel verwarring te zorgen.
Ik bedacht me net dat ik in een tabel gewoon zelf user id's kan aangeven door de rows te tellen die ik gebruik (1 row is 1 user). Dan laat ik gewoon de id's weg en ziet het er tog nietjes uit.
Bedankt voor de tips mensen.
Deze ordered list zet gewoon nummers neer, net als de opsommingen in tekstverwerkers.
Krijg je keurig een genummerd lijstje te zien.
Wil je wel nummers weergeven, maar dan gewoon een genummerde lijst kan je de users altijd weergeven in een Krijg je keurig een genummerd lijstje te zien.
Een nummer weergeven is dus niet helemaal handig. Wanneer je een user verwijderd klopt het nummer niet meer dat voor een bepaalde gebruiker staat. Ook ligt het er maar net aan hoe je de tabel sorteert. Oftewel. Niks met nummer doen als je het 'netjes' wil hebben is wel zo verstandig.
Ik weet genoeg, bedankt mensen:)
Gewijzigd op 01/01/1970 01:00:00 door Menno Ridder
Een ID is niets. Een ID geeft alleen een uniek record aan. Sla een registratiedatumtijd op bij iedere gebruiker en sorteer daar op.