[MySQL]

Pagina: 1
Acties:

  • R_W
  • Registratie: Oktober 2002
  • Niet online
Beste Tweakers ;)

Ik ben bezig met een soort van admin pagina in PHP, hiermee moet men schilderijen kunnen sorteren. Dit heb ik als volgt gedaan:

Je kunt kiezen hoe ver (=x) je het schilderij naar boven of naar onder wilt verplaatsen (middels een dropdownlist). Vervolgens zoekt PHP de rij id_te_verplaatsen_rij + x en de rij id_te_verplaatsen_rij + x + 1. Daar pak ik het gemiddelde van en dat wordt het "ordernummer" van de rij.

Bijv. ik heb rij 1, 2, 3 en 4 stel ik wil rij 4, 2 plaatsen naar voren halen krijgt rij 4 het nummer 2 / 3 = 2.5.

Nu kun je je voorstellen dat er steeds meer decimalen bij komen, kan ik vertrouwen op het aantal decimalen van het MySQL type double?

Ik had ook al aan het volgende gedacht:
PHP:
1
2
3
4
5
6
7
8
9
10
   $sql = "SELECT `id` FROM `painting` ORDER BY `order` ASC";
   $result = $mysql->query ( $sql );

   $i = 1;
   while ( $object = mysql_fetch_object ( $result ) )
   {
      $sql = "UPDATE `painting` SET `order` = " . $i . " WHERE `id` = " . $object->id;
      $mysql->query ( $sql );
      $i++;
   }

Maar dit is niet bepaald database vriendelijk.

Kan iemand me vertellen of het type double voldoet? Of heeft iemand een idee om m'n sorteer algoritme te verbeteren?

Alvast bedankt voor het meedenken ;)

[edit]
Hmpff, titel vergeten af te maken 8)7, misschien dat een modje 'm even kan veranderen...

[ Voor 7% gewijzigd door R_W op 03-03-2004 06:05 ]


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Waarom doe je niet gewoon

UPDATE Painting SET Order = [nieuwe volgorde]
UPDATE painting SET order = ORDER + 1 WHERE Order > [nieuwe volgorde]

Oops! Google Chrome could not find www.rijks%20museum.nl


  • R_W
  • Registratie: Oktober 2002
  • Niet online
Hmm idee van P_de_B is inderdaad een stuk eenvoudiger, ik heb dat nu geimplementeerd en het werkt perfect.

Bedankt!