Auto Ingrement id laten oplopen?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Menno Ridder

Menno Ridder

30/05/2008 21:17:00
Quote Anchor link
Hallo,
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.
 
PHP hulp

PHP hulp

24/11/2024 23:09:08
 
Citroen Anoniem Graag

Citroen Anoniem Graag

30/05/2008 21:34:00
Quote Anchor link
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.
Gewijzigd op 01/01/1970 01:00:00 door Citroen Anoniem Graag
 
- SanThe -

- SanThe -

30/05/2008 21:38:00
Quote Anchor link
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.

Zo is dat.

Dus: Afblijven!!
 
Onbekend Onbekend

Onbekend Onbekend

30/05/2008 21:38:00
Quote Anchor link
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?
 
Menno Ridder

Menno Ridder

30/05/2008 21:48:00
Quote Anchor link
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?
 
Citroen Anoniem Graag

Citroen Anoniem Graag

30/05/2008 21:52:00
Quote Anchor link
Maar je kan toch gewoon een scriptje maken dat alle users zonder hun lid id uit de db haalt. Dan zie je het ook niet.

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
Gewijzigd op 01/01/1970 01:00:00 door Citroen Anoniem Graag
 
Jan Koehoorn

Jan Koehoorn

30/05/2008 22:00:00
Quote Anchor link
SELECT COUNT(*) is geoptimaliseerd en sneller, als je geen WHERE gebruikt tenminste.
 
Crispijn -

Crispijn -

31/05/2008 10:35:00
Quote Anchor link
Het oog wil ook wat. Lekker boeiend. Je kan er ook voor kiezen het id helemaal niet weer te geven. Dan heb je hier ook geen last van.

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.
 
Menno Ridder

Menno Ridder

31/05/2008 12:50:00
Quote Anchor link
Ok, dat is misschien ook wel slim, om daar gewoon af te blijven.
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.
 
Robert Deiman

Robert Deiman

31/05/2008 13:02:00
Quote Anchor link
Wil je wel nummers weergeven, maar dan gewoon een genummerde lijst kan je de users altijd weergeven in een
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<ol>
Deze ordered list zet gewoon nummers neer, net als de opsommingen in tekstverwerkers.
Krijg je keurig een genummerd lijstje te zien.
 
Crispijn -

Crispijn -

31/05/2008 14:30:00
Quote Anchor link
Of je gaat werken met een paginatie... Dan moet je op een een of andere manier opgeven bij welk nummer weer verder geteld kan worden Robert ;)

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.
 
Menno Ridder

Menno Ridder

01/06/2008 13:08:00
Quote Anchor link
Ja, je hebt gelijk. Ik zal het wel gewoon weg halen. Het is natuurlijk ook vrij nutteloos omdat alles automatisch gaat met die id's. Ik laat hem wel gewoon ORDER BY 'id' en dan laat ik gewoon het id zelf niet zien.
Ik weet genoeg, bedankt mensen:)
Gewijzigd op 01/01/1970 01:00:00 door Menno Ridder
 
Jesper Diovo

Jesper Diovo

01/06/2008 13:19:00
Quote Anchor link
Een ID is niets. Een ID geeft alleen een uniek record aan. Sla een registratiedatumtijd op bij iedere gebruiker en sorteer daar op.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.