Geavanceerde auto increment?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Nils Kuijpers

Nils Kuijpers

06/11/2008 08:33:00
Quote Anchor link
Bestaat er een mogelijkheid om als ik bijvoorbeeld een auto increment op een kolom ID heb zitten, en ik heb 9 records ingevoegd dus er staat al 1 t/m 9. Dan wil ik dat als ik handmatig een record 3 invoeg, de huidige 3 4 wordt, 4 5 wordt etc etc.

Is dat mogelijk?
 
PHP hulp

PHP hulp

22/11/2024 05:25:28
 
Barman V

Barman V

06/11/2008 08:39:00
Quote Anchor link
Waarom wil je dat doen? Om te sorteren? Dan moet je dat op een andere manier oplossen.

Anyway, MySQL kent naar mijn weten niet zo'n functie. Het zou namelijk erg gek zijn om zo je id's te veranderen (helemaal als deze relaties bevat naar andere tabellen).

Je moet dit dus met een UPDATE statement doen.
 
Nils Kuijpers

Nils Kuijpers

06/11/2008 08:41:00
Quote Anchor link
Om te sorteren idd, wat zou er dan praktisch zijn?
 
Erik Rijk

Erik Rijk

06/11/2008 08:43:00
Quote Anchor link
@ Nils,

Gewoon alsnog sorteren op id. Dat er een gat tussen zit maakt niet uit, ga niet je auto_increment waarde veranderen en hecht hier ook niet teveel waarde aan.

Je kan op tig manieren sorteren.
op naam ( ASC / DESC )
email, id, datum e.d.
 
Nils Kuijpers

Nils Kuijpers

06/11/2008 08:44:00
Quote Anchor link
Erik, de gebruiker moet zelf de volgorde kunnen aanpassen.
 
Erik Rijk

Erik Rijk

06/11/2008 08:47:00
Quote Anchor link
Geen probleem toch?

Wat ben je aan het proberen nu? laat eens een stukje script zien dan begrijp ik iets beter wat je bedoel.
 
Barman V

Barman V

06/11/2008 08:50:00
Quote Anchor link
Bijvoorbeeld een extra kolom SORT o.i.d.
Deze geef je het juiste ordernr.

Elke keer als je een record toevoegt (of de sortering wijzigt), dan moet je de ordernr's wijzigen. Het beste is als je de SORT kolom een decimal geeft (geen int). Je hebt dan bijv:

1.0
2.0
3.0
4.0

Stel dat je de 4.0 tussen de 1.0 en 2.0 wil zetten, dan wijzig je tijdelijk de 4.0 naar 1.5.

Bij het loopen door je resultaten in PHP neem je een teller variabele mee, die checkt of de ordering nog juist loopt, dus:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
$i
= 1;
while ($row = .......){
if ($row['SORT'] != $i){
// update SORT waarde van dit record naar $i (in database)
}

++
$i;
}

?>


Zo herstel je de ordering in je database. Werkt erg makkelijk.

Misschien bestaat er een makkelijkere manier, maar deze weet ik niet.

EDIT:
@ERIK:
Dit is wel een probleem, want de sortering moet handmatig aangepast kunnen worden. Op jouw manier kan dat niet.
Gewijzigd op 01/01/1970 01:00:00 door Barman V
 
Nils Kuijpers

Nils Kuijpers

06/11/2008 08:51:00
Quote Anchor link
komt er op neer dat er nu een hoofd tabel is , de records die daar in staan hebben ieder een id en een naam ( onder andere ) en die naam correspondeert met een andere tabel in de database. In de hoofd tabel kan ik dus zien welke andere tabellen er bij horen. Deze tabellen die beschreven staan in de hoofd tabel worden vervolgens opgehaald, maar ik wil de gebruiker laten kiezen in welke volgorde!
 
Robert Deiman

Robert Deiman

06/11/2008 09:12:00
Quote Anchor link
@Barman

Dat is niet het beste, want je kan in de toekomst nog steeds tegen een knelpunt oplopen. Het slimste om te doen is een positie opgeven bij het INSERTEN..
Bestaat die positie al, dan die positie + alle hogere + 1 doen. (op zich dus een eitje)
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
UPDATE tabel SET positie = positie+1 WHERE positie >= [opgegeven positie]


Vervolgens controleren of de query is gelukt, en dan doe je de insert query.

Je volgorde blijft zo goed en je hebt er geen beperkingen aan, die je met de oplossing van Barman (met decimalen) wel hebt, je kan er maximaal 10 toevoegen.
 
Barman V

Barman V

06/11/2008 09:21:00
Quote Anchor link
Robert_Deiman schreef op 06.11.2008 09:12:
@Barman

Dat is niet het beste, want je kan in de toekomst nog steeds tegen een knelpunt oplopen. Het slimste om te doen is een positie opgeven bij het INSERTEN..
Bestaat die positie al, dan die positie + alle hogere + 1 doen. (op zich dus een eitje)
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
UPDATE tabel SET positie = positie+1 WHERE positie >= [opgegeven positie]


Vervolgens controleren of de query is gelukt, en dan doe je de insert query.

Je volgorde blijft zo goed en je hebt er geen beperkingen aan, die je met de oplossing van Barman (met decimalen) wel hebt, je kan er maximaal 10 toevoegen.


Dit is inderdaad de betere oplossing. Overigens heb ik met mijn manier geen problemen gekend, het werkt als een zonnetje, maar het is inderdaad wat omslachtig. Ik zal deze manier in mijn achterhoofd houden.

Wat bedoel je met maximaal 10 toevoegen? Met mijn manier kon je ook veel meer toevoegen.
 
Arjan Kapteijn

Arjan Kapteijn

06/11/2008 09:37:00
Quote Anchor link
Ikzelf werk meestal met een volgorde ID, dan hoef je je normale ID niet aan te passen en kan je naar hartelust gaan sorteren. Zoals ik hier heb toegepast en waarvan de code hier te vinden is.

Barman zijn idee raad ik niet aan, afgezien van het feit dat je dan zelf moet gaan nadenken loop je tegen het probleem aan dat je tussen 2.0 en 3.0 maar 10 paginas kunt toevoegen, tenzij je meer cijfers achter de komma erbij gaat halen... maar dan maak je het geheel nog lastiger.
 
Barman V

Barman V

06/11/2008 09:57:00
Quote Anchor link
Arjan Kapteijn schreef op 06.11.2008 09:37:
Barman zijn idee raad ik niet aan, afgezien van het feit dat je dan zelf moet gaan nadenken loop je tegen het probleem aan dat je tussen 2.0 en 3.0 maar 10 paginas kunt toevoegen, tenzij je meer cijfers achter de komma erbij gaat halen... maar dan maak je het geheel nog lastiger.


Mijn code was inderdaad minder goed. Maar je ziet het verkeerd. Het werkt als volgt:

Records met ordernr's:
1.0
2.0
3.0
4.0
5.0

Stel je wil 5.0 tussen 2.0 en 3.0 zetten, dan wijzig je 5.0 in 2.5.
Het queryvoorbeeld die ik in mijn eerste post toonde update de records weer als volgt:

1.0
2.0
2.5 > wordt 3.0
3.0 > wordt 4.0
4.0 > wordt 5.0

Ik geef toe dat dit niet de beste manier was, maar het werkte prima voor mij.
 
Nils Kuijpers

Nils Kuijpers

06/11/2008 10:23:00
Quote Anchor link
Bedankt robert, perfect.
 



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.