[php & mysql] Updaten volgorde met behulp van Array

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Erpenator2
  • Registratie: Augustus 2003
  • Laatst online: 16-09 14:21
Beste Tweakers,

Ik zit met het volgende probleem. Ik heb een CMS waarbij het mogelijk is om met de volgorde van berichten te schuiven. Dit werkt allemaal perfect.

Het enige probleem heb ik wanneer een bericht verwijderd word. Ieder bericht krijg een waarde toegekend wanneer deze gemaakt word ( max value + 10)

Wanneer je een bericht later verwijderd klopt de volgorde niet meer.
Voorbeeld: 10 20 30 ... 50 60

Ik zou nu graag alle volgordes na een deletele willen uitlezen en deze opnieuw willen rangschikken in de database met update.

Belangrijk is ook dat ik in het update commando een ID mee geef naast de volgorde anders gaat het niet werken.

Zelf dacht ik er aan om in een array het ID en de volgorde aan elkaar te koppelen dan te kijken of het verschil tussen de waardes steeds niet groter is dan 10 en als dat wel is deze aan te passen in een nieuw array zodat ik daarna met een while lus alles kan updaten.

Heb alleen geen idee hoe je dat programmeerd :P

Wie kan mij helpen.

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Wat is er op tegen als er een "gat" in je volgorde zit? Dat maakt voor het sorteren toch niet uit?

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 08:24

gorgi_19

Kruimeltjes zijn weer op :9

drm schreef op 03 november 2003 @ 15:18:
Wat is er op tegen als er een "gat" in je volgorde zit? Dat maakt voor het sorteren toch niet uit?
Uberhaupt vind ik de volgorde onzinnig; ieder bericht heeft een plaatsingsdatum en sorteer op plaatsingsdatum.

Tenzij... Je de volgorde nog wilt wijzigen, maar weet niet of dat van toepassing is.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • Erpenator2
  • Registratie: Augustus 2003
  • Laatst online: 16-09 14:21
jawel, want door middel van knopjes op mijn pagina kan ik de volgorde aanpassen. Deze knoppen nemen de waarde over van de volgorde(tabel) in de database.

Dus dan lijkt het of het knopje niet werkt terwijl dat wel zo is, maar hij het "gat" opvult en het gat zich ergens anders plaatst.

Ik kan dus ook niet op datum of iets anders sorteren, omdat het er echt om gaat wat de "gebruiker" als volgorde wil definieren.

[ Voor 21% gewijzigd door Erpenator2 op 03-11-2003 15:22 ]


Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 14:51
Maar, waarom wil je dat 'gat' opvullen?
Dat volgnummer is toch slechts een 'administratieve' waarde in je DB die je toch niet ziet?

en zoals gorgi_19 al zegt: je sorteert toch gewoon op datum ?

[ Voor 20% gewijzigd door whoami op 03-11-2003 15:34 ]

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • Erpenator2
  • Registratie: Augustus 2003
  • Laatst online: 16-09 14:21
Nee, deze volgorde gebruik ik ook echt.

Ik pas op een pagina deze volgorde ook aan aan de hand van de gegevens uit de database.

Dus deze gegevens moeten wel kloppen en er mag dus geen gat zitten, want dan lijkt het alsof het niet werkt, wanneer je het knopje gebruikt.

Acties:
  • 0 Henk 'm!

  • Noork
  • Registratie: Juni 2001
  • Niet online
Erpenator2 schreef op 03 november 2003 @ 15:20:
jawel, want door middel van knopjes op mijn pagina kan ik de volgorde aanpassen. Deze knoppen nemen de waarde over van de volgorde(tabel) in de database.

Dus dan lijkt het of het knopje niet werkt terwijl dat wel zo is, maar hij het "gat" opvult en het gat zich ergens anders plaatst.

Ik kan dus ook niet op datum of iets anders sorteren, omdat het er echt om gaat wat de "gebruiker" als volgorde wil definieren.
Haal ze in de volgorde binnen waar ze in de db staan en geef er daarna een nieuwe waarde aan. Dus 10, 20, 40, 70 --> 10, 20 , 30, 40.

Ik heb eventueel een mooi javascriptje om de volgorde van items te wijzigen.

Acties:
  • 0 Henk 'm!

  • Erpenator2
  • Registratie: Augustus 2003
  • Laatst online: 16-09 14:21
Dat is precies wat ik wil noork maar ik weet niet goed hoe ik dat moet doen.

Als het array gedeelte (code) is opgelost, dus de controle of er meer dan 10 verschil in zit en de opbouw van het array kom ik er verder zelf wel uit.

[ Voor 22% gewijzigd door Erpenator2 op 03-11-2003 15:43 ]


Acties:
  • 0 Henk 'm!

  • Noork
  • Registratie: Juni 2001
  • Niet online
Het is toch niet zo moeilijk.
Gewoon in een hidden textfield even een waarde zetten.

code:
1
2
3
$i=10;
echo "<input type=\"hidden\" value=\"$i\">";
$i=$i+10;


zoiets en dan in een loopje. Sorry, heb geen verstand van arrays, maar dat lijkt me niet lastig te implementeren.

[ Voor 34% gewijzigd door Noork op 03-11-2003 15:51 ]


Acties:
  • 0 Henk 'm!

  • Erpenator2
  • Registratie: Augustus 2003
  • Laatst online: 16-09 14:21
Dat gedeelte heb ik al noorsk om he top de pagina weer te geven, ik die dat inderdaad met een echo.

het gaat me echt puur en alleen om de volgorde opnieuw te sorteren met daarbij gekoppeld een ID uit de database zodat ik een update kan uitvoeren.

Of leg ik het nu allemaal zo vekeerd uit?

Acties:
  • 0 Henk 'm!

  • OkkE
  • Registratie: Oktober 2000
  • Laatst online: 04-09 08:16

OkkE

CSS influencer :+

Waarom die sprongen van 10? :?

Als ik het goed begrijp zit het zo:
code:
1
2
3
4
5
| id | tekst  | rank |
|----+--------+------|
| 1  | Eerste |  10  |
| 2  | Tweede |  70  |
| 3  | Derde  |  30  |

En wil je dar rank dus netjes 10,20,30 wordt?

Zou ik een functie ofzo maken die op moment dat je er 1 verwijderd, alle rows boven die rank ophaald en terug schrijft met
code:
1
rank = rank - 10
En er dan wel voor zorgen dat je die met de laagste rank eerst doet, omdat je anders kans hebt op (tijdelijke) dubbele waarde, wat misschien niet mag ivm index/primary key/unique.. :)

“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.


Acties:
  • 0 Henk 'm!

  • Noork
  • Registratie: Juni 2001
  • Niet online
Als ik het goed begrijp zit het zo:
code:
1
2
3
4
5
| id | tekst  | rank |
|----+--------+------|
| 2  | Eerste |  10  |
| 4  | Tweede |  20  |
| 7  | Derde  |  70  |

En wil je dar rank dus netjes 10,20,30 wordt?


Doe een select. Sorteer ze op je huidige volgorde. Zet ze in een array. Voor elke rij in je array een update waarbij je de volgorde steeds met 10 ophoogt? Ik zie je probleem nu niet meer zo.

oh ja, ga dit niet met 1000 records doen, anders is het wel sneu voor je performance.

[ Voor 49% gewijzigd door Noork op 03-11-2003 15:59 ]


Acties:
  • 0 Henk 'm!

  • Erpenator2
  • Registratie: Augustus 2003
  • Laatst online: 16-09 14:21
die antwoorden die jullie posten daar zoek ik naar, ik zoek naar een voorbeeld code zodat ik deze kan aanpassen. Ik ben zelf niet sterk in Arrays en het het maken van een controle in een array( zodat ze allemaal maar 10 van elkaar afliggen) Dus vraag ik jullie hoe maak ik zo iets ? met andere woorden kan iemand een klein voorbeeld code geven? :)

Aan de hand daarvan kom ik wel verder en kan ik het wel aanpassen en ben ik jullie ontzettend dankbaar _/-\o_

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

Persoonlijk zou ik dit probleem anders benaderen. Ik zie niet het gat als probleem, maar jouw algoritme voor het aanpassen van de volgorde. Als je er nu eens voor zorgt dat het wissel knopje niet afhankelijk is van stapgrootte 10 (waarom trouwens uberhaupt een stapgrootte van 10 afdwingen waneer je daar niet van af kan wijken? Dan kun je toch net zo goed een stapgrootte 1 nemen?)

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Noork
  • Registratie: Juni 2001
  • Niet online
Eh ja, ik zoek ook weleens code. Maar er zijn nu genoeg hints gegeven. Ik denk dat hier http://gathering.tweakers.net/forum/find wel wat goede voorbeelden te vinden zijn.

http://gathering.tweakers...5BxDB%5D=default#hitstart
Graag gedaan.

[ Voor 61% gewijzigd door Noork op 03-11-2003 16:09 ]


Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Janoz:
Persoonlijk zou ik dit probleem anders benaderen. Ik zie niet het gat als probleem, maar jouw algoritme voor het aanpassen van de volgorde. Als je er nu eens voor zorgt dat het wissel knopje niet afhankelijk is van stapgrootte 10 (waarom trouwens uberhaupt een stapgrootte van 10 afdwingen waneer je daar niet van af kan wijken? Dan kun je toch net zo goed een stapgrootte 1 nemen?)
Exactly my thoughts.

offtopic:
Daar komt nog bij dat het in je CMS veel eenvoudiger is om de volgorde op basis van DOM aan te passen om pas bij het submitten van je data te achterhalen wat de nieuwe volgorde is en dan pas volgnummers toe te kennen ipv bij het wijzigen al met volgnummers aan de slag te gaan.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • Erpenator2
  • Registratie: Augustus 2003
  • Laatst online: 16-09 14:21
Stap grootte 10 is gewoon een beetje willekeurig gekozen, ik had inderdaad ook 1 kunnen pakken, maar dat maakt voor het script toch niets uit ?

Janoz, hoe zou jij het dan aanpakken?

en Noork bedankt voor het zoeken :D

Ik heb alles nu gevonden wat ik nodig heb en kan vooruit!
Ik zal de code plaatsen wanneer ik het af heb voor de personen die daar in geinterresseerd zijn.

Alvast bedankt. ( maar ik ben nog wel benieuwd naar Janoz zijn aanpak)

Acties:
  • 0 Henk 'm!

  • Noork
  • Registratie: Juni 2001
  • Niet online
Tja is ook handiger dat je code niet op z'n bek gaat omdat er een stap niet tussen zit. Het maakt in principe niet uit of je volgorde nummers 10, 100 en 2030 gebruikt, zolang de volgorde maar gehandhaaft is.

Acties:
  • 0 Henk 'm!

  • OkkE
  • Registratie: Oktober 2000
  • Laatst online: 04-09 08:16

OkkE

CSS influencer :+

Hier een stukje code van mijn eerste poging zo'n zelfde soort probleem aan te pakken, maar dan idd wel met een stap-grote van 1.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {

    if ( $line['rank'] >= $HTTP_POST_VARS['rank'] ) {

        $line['rank']++;

        $ranksql = "UPDATE `website` SET rank = rank+1 WHERE id = ".$line['id'];

        mysql_query($ranksql,$db) or die("Ophogen mislukt...");

    } else {

        // Deze ID ligt onder de toegevoegde, dus hoeft niet gewijzigd.

    }

}

[ Voor 19% gewijzigd door OkkE op 03-11-2003 16:17 ]

“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.

Pagina: 1