Hallo,
heb een vraagje aan jullie! Ik wil er wel meteen op wijzen dat ik een beginner ben {vandaar in deze categorie}, dus verwacht niet te veel van me. Ik zal vast bepaalde termen verkeerd gebruiken... :P

Ik wil met PHP dingen naar een database sturen, dit gaat hartstikke goed.
Nu heb ik een formuliertje gemaakt om iets naar de database te versturen, dit gaat ook hartstikke goed...

Ik heb een formuliertje gemaakt waar je een URL in kan voeren. Als deze naar de database wordt verstuurd wordt er automatisch een id aan gegeven. (Dit heb ik gedaan met AUTO_INCREMENT. Dit gaat dus mooi en kan zo een aantal URL's naar de database sturen die er steeds een nieuw id aan geeft.

Nu is het probleem, dat als ik een URL wil verwijderen uit de database, dat er dus een id wegvalt. Als ik weer een nieuwe URL toevoeg gaat hij gewoon verder met waar hij gebleven was.
Je krijgt dan dus dit:
URL1 - ID=1
URL2 - ID=2
URL3 - ID=3
URL5 - ID=5
URL6 - ID=6
URL7 - ID=7

Het is vast mogelijk om hier dan als je een nieuwe URL heen wil sturen {in dit geval URL8} dat er het id 4 aan wordt gegeven. Maar ik weet dus niet hoe...

Mij lijkt de oplossing op steeds te zeggen dat hij id=1 moet aanmaken, bestaat deze al doe dan +1 tot er een id komt die nog niet bestaat. Zou niet weten of hier een mooie code voor is...

Hoop dat ik het een beetje duidelijk heb uitgelegd, hoop dat jullie me kunnen helpen.
Alvast hartelijk bedankt!

Owjah; weet niet of jullie hier wat aan hebben, maar zo verstuur ik iets naar de MYSQL database:
$sql = "INSERT INTO sites(website) VALUES ('" . $siteURL . "')";
mysql_query($sql);
Probleem verholpen, of wat?
Hertog Jan op 11/04/2012 22:44:24

Mark Honsbeek, jij bent niet een van de snuggerste thuis of wel ;-) Komt omdat URL4 verwijderd is, hij wil dus bij een volgende INSERT de tabel aanvullen met ID 4...


Uh, je bedoelt de andere Mark neem ik aan?

@Mark Honsbeek: Het slimste is om er niet aan te gaan knoeien. De kans is aanwezig (zeker bij wat grotere databases) dat je jezelf allerlei problemen op de hals haalt. Dat (auto_increment) id is alleen voor de database belangrijk.
Een database is niet om gegevens uit te verwijderen.. Een oplossing (ook al heb ik het liefst dat je gewoon je increment aanhoud) kan het volgende zijn:


CREATE TABLE tabel (
id int unsigned not null auto_increment primary key,
link varchar(200) not null,
actief enum('ja', 'nee') not null default 'ja'
);


Zodra er nu een link 'verwijderd' word zet je eigenlijk gewoon het veld actief op nee. Als er nu een nieuwe link word toegevoegd kan je eerst kijken of er velden zijn die dan niet actief zijn en van die record dus de link aanpassen. Zo blijft je database ook in orde ;)

De rest mag je natuurlijk zelf maken.
mebus, dit mag je me even uitleggen:
Een database is niet om gegevens uit te verwijderen..

En waarom zou je zo ingewikkeld gaan doen met actief/nonactief als je gewoon iets kan verwijderen met een DELETE query?
Wouter J op 12/04/2012 10:24:32

mebus, dit mag je me even uitleggen:
Een database is niet om gegevens uit te verwijderen..

En waarom zou je zo ingewikkeld gaan doen met actief/nonactief als je gewoon iets kan verwijderen met een DELETE query?


Een database is er toch om gegevens in op te slaan? Waarom dan vervolgens weer verwijderen terwijl je er misschien ooit nog wat aan hebt. Maar dat is mijn mening. Een database is er uiterraard ook om dingen te kunnen verwijderen.

En ingewikkeld? Ik stel alleen een mogelijke oplossing voor voor de TS. De TS wil dat zodra een record met ID 4 niet meer bestaat er een record word aangemaakt met id 4 ook al bestaat er een record met id 5, maar omdat auto_increment gewoon doornummert kan je niet zomaar een record toevoegen in de database dat een lager id heeft dan dat auto_increment voor het laatst heeft meegegeven. Vandaar het actief/non-actief idee. Wat in mijn ogen de simpelste oplossing is.
Wouter J op 12/04/2012 10:24:32

mebus, dit mag je me even uitleggen:
Een database is niet om gegevens uit te verwijderen..

En waarom zou je zo ingewikkeld gaan doen met actief/nonactief als je gewoon iets kan verwijderen met een DELETE query?

Ik zelf verwijder zelden iets uit de database maar heb bij elke tabel een kolom deleted (enum('true'/'false').

Bij een computer heb je toch ook een prullenbak ;-)

Hertog Jan op 12/04/2012 11:26:47

[quote="Wouter J op 12/04/2012 10:24:32"]
mebus, dit mag je me even uitleggen:
Een database is niet om gegevens uit te verwijderen..

En waarom zou je zo ingewikkeld gaan doen met actief/nonactief als je gewoon iets kan verwijderen met een DELETE query?

Ik zelf verwijder zelden iets uit de database maar heb bij elke tabel een kolom deleted (enum('true'/'false').

Bij een computer heb je toch ook een prullenbak ;-)


[/quote]

Als je iets verwijdert van je computer staat het bestand ook nog altijd op je computer.. Maar kan het bij de eerst volgende schrijf actie wel overschreven worden.
Mark Honsbeek op 11/04/2012 22:37:44

Anders kom ik in de knoop met een volgend stukje code...

Wat is die volgende code dan/waarom kom je daarmee in de knoop?
Mogelijk is je denkwijze daar niet goed/kan het ook anders.
Met de mogelijkheid om een record als 'verwijderd' te markeren loop je mogelijk tegen hetzelfde probleem aaan.

Het opvullen van verwijderde id's zou ik echter afraden.

Ik heb het probleem opgelost door het volgende stukje code aan te passen.
Nogmaals bedankt voor het meedenken.

Groetjes

Reageren