MySQL: Na UPDATE rij alle nummers weer van 1 tot einde

Pagina: 1
Acties:

  • b03tz
  • Registratie: Augustus 2004
  • Laatst online: 16-11 09:45
Ik hoop dat ik de topic zo goed mogelijk beschreven heb O-)

Hier is het probleem, ik heb een database als volgt:

Afbeeldingslocatie: http://muay.pn-photography.com/db.jpg

Nu is het zo dat wanneer ik een block uitschakel, wordt de position "0".
Vervolgens als ik het block naar links wil (inschakel) wordt position "l" (L)

Nu wil ik graag het volgende, wanneer ik een block terug zet op position L dat ook van ALLE blocks van position L de weight herstelt wordt naar een fatsoenlijke nummering van 1 tot eind. Nu staat er weight: 4, 6, 7. Als ik block 1 er bij in plaats moet de output dan zijn: weight 1, 2, 3, 4.

Ik hoop dat het een beetje duidelijk is. Ik gebruik dus een select query om de blocken op weight te sorteren. Het gaat er dus puur om dat de nummering in de database netjes en binnen proporties blijft en dus de volgorde niet aangetast wordt maar wel de nummering erachter gereset.

Gaarne hulp hierbij :)

b03tz

BYD Tang Final Edition | 2x Marstek Venus 5.12KW | HW P1 | Homey Pro 2023


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Ik zie niet waarom je de moeite zou doen om ze te (her)nummeren. 4, 6, 7 gesorteerd levert dezelfde volgorde op als 1, 2, 3.
Je moet een hoop gekke toeren uit gaan halen als je dit kloppend wil hebben en houden; ik adviseer je gewoon in je presentatielaag (mocht je uberhaupt die nummers ooit ergens tegen komen of gebruiken behalve voor sorteren) i.p.v. de eigenlijke waarde van dat veld op dat moment gewoon een teller bij te houden en die weer te geven.
Zolang een eindgebruiker die nummering nergens ziet is er helemaal geen noodzaak om die nummering te hernummeren; het zal de gebruiker worst (moeten :P ) wezen hoe je app die dingen ophaalt in de juiste volgorde en jij als devver moet je met andere belangrijkere taken bezighouden dan veldjes opschonen en hernummeren als dat niet nodig is ;) Mocht je die nummering wel ergens weergeven dan zeg ik dus: gebruik beschreven "teller"methode in je presentatielaag, ongeacht wat er in de DB staat; de records heb je dan toch al in de juiste volgorde. Bij het opslaan van een nieuwe volgorde (waarbij dus die teller is gebruikt) heb je dan gratis en voor niks alsnog een 'geresette' weight.

[ Voor 44% gewijzigd door RobIII op 24-02-2007 11:22 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • b03tz
  • Registratie: Augustus 2004
  • Laatst online: 16-11 09:45
Klopt je hebt wel gelijk. Misschien ben 'k hier wel freakish over :P Maar dan krijg je van die sorteer nummers van 15000 15003 15028 :P

Niet overzichtelijk.

Maar je hebt wel gelijk. Ik denk dat 'k het hier eerst bij laat :)

BYD Tang Final Edition | 2x Marstek Venus 5.12KW | HW P1 | Homey Pro 2023


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
b03tz schreef op zaterdag 24 februari 2007 @ 11:22:
Klopt je hebt wel gelijk. Misschien ben 'k hier wel freakish over :P Maar dan krijg je van die sorteer nummers van 15000 15003 15028 :P

Niet overzichtelijk.
Like who cares :D ;)
Je moet trouwens al heel wat 'edits' uitvoeren om op 15000 te komen :P

[ Voor 11% gewijzigd door RobIII op 24-02-2007 11:23 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • b03tz
  • Registratie: Augustus 2004
  • Laatst online: 16-11 09:45
RobIII schreef op zaterdag 24 februari 2007 @ 11:23:
[...]

Like who cares :D ;)
Je moet trouwens al heel wat 'edits' uitvoeren om op 15000 te komen :P
Dat is ook inderdaad wel zo, maar het is volgorde he. Dus je drukt een paar pijltjes en de nummering begint te lopen :P En ik ken mensen ...... :*) 8)7

BYD Tang Final Edition | 2x Marstek Venus 5.12KW | HW P1 | Homey Pro 2023


  • b03tz
  • Registratie: Augustus 2004
  • Laatst online: 16-11 09:45
Toch stiekem even geprobeerd :P
function resort_blocks($position) {
$query = 'SELECT * FROM blocks WHERE position = "'.$position.'" ORDER BY weight ASC';
$result = mysql_query($query);
$count = 1;
while ($row = mysql_fetch_array($result)) {
mysql_query('UPDATE blocks SET weight = "'.$count.'" WHERE position = "'.$position.'" AND id = "'.$row[id].'"');
$count++;
}
}
werkt wel :P iets simpeler als 'k dacht :S

[ Voor 6% gewijzigd door b03tz op 24-02-2007 11:31 ]

BYD Tang Final Edition | 2x Marstek Venus 5.12KW | HW P1 | Homey Pro 2023


  • DigiK-oz
  • Registratie: December 2001
  • Laatst online: 14:54
Ik mag hopen dat je database niet te groot gaat worden. Als er op een gegeven moment een paar 1000 rijen inzitten met een bepaalde position, knal je op deze manier "even" een paar 1000 update-statements richting de database. En zelfs al duurt een update statement maar 1/100 seconde, dan nog kost je dit tientallen seconden.

Whatever


  • b03tz
  • Registratie: Augustus 2004
  • Laatst online: 16-11 09:45
Sloompie schreef op zaterdag 24 februari 2007 @ 11:40:
Ik mag hopen dat je database niet te groot gaat worden. Als er op een gegeven moment een paar 1000 rijen inzitten met een bepaalde position, knal je op deze manier "even" een paar 1000 update-statements richting de database. En zelfs al duurt een update statement maar 1/100 seconde, dan nog kost je dit tientallen seconden.
Mm dat is waar. Maar ik neem aan dat mensen niet 1000 blokken aan de linkerkant van hun website willen :*) Dus ik denk (eigenlijk hoop) dat dit wel goed gaat :)

[ Voor 0% gewijzigd door b03tz op 24-02-2007 11:43 . Reden: Blocken? mm ]

BYD Tang Final Edition | 2x Marstek Venus 5.12KW | HW P1 | Homey Pro 2023


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Again: focus je op andere dingen is mijn advies. Dit is completely and utterly useless. Daarnaast: "Assumptions are the mother of all fuckups" ;)

Je oplossing werkt wel, ik was echter onder de indruk dat je dit met 1 query wou oplossen.

[ Voor 24% gewijzigd door RobIII op 24-02-2007 11:53 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Dido
  • Registratie: Maart 2002
  • Laatst online: 10:34

Dido

heforshe

Wat je zou kunnen doen om je sortering op een andere manier aan te pakken, en om te voorkomen dat je erg veel updates moet gaan doen, zou je het volgende systeem kunnen toepassen (ik heb het zelf gebruikt om arrays gesorteerd te houden terwijl er items werden toegevoegd):

Neem bij ieder blok twee extra velden op, voor het "vorige" en "volgende" block.

Als je blok X toevoegd tussen Y en Z, dan wordt X(vorige)=Y, X(volgende)=Z, Y(volgende)=X en Z(vorige)=X.

Haal je blok X weer weg, dan wordt Y(volgende)=X(volgende), Z(vorige)=X(vorige).

Dire updates, hoeveel blocks je ook hebt.

Wat betekent mijn avatar?


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:54
Met RobIII.
Wat is -voor de gebruiker- nu het nut dat er geen 'gaten' in je volgorde zitten ? Hij ( de gebruiker ) heeft er toch niets mee te maken ? Hij ziet het niet eens ?
Ik zou m'n tijd ook voor iets anders gebruiken, en niet voor zo iets zinloos die eigenlijk niets van toegevoegde waarde heeft.

https://fgheysels.github.io/


  • b03tz
  • Registratie: Augustus 2004
  • Laatst online: 16-11 09:45
Dido schreef op zaterdag 24 februari 2007 @ 11:52:
Wat je zou kunnen doen om je sortering op een andere manier aan te pakken, en om te voorkomen dat je erg veel updates moet gaan doen, zou je het volgende systeem kunnen toepassen (ik heb het zelf gebruikt om arrays gesorteerd te houden terwijl er items werden toegevoegd):

Neem bij ieder blok twee extra velden op, voor het "vorige" en "volgende" block.

Als je blok X toevoegd tussen Y en Z, dan wordt X(vorige)=Y, X(volgende)=Z, Y(volgende)=X en Z(vorige)=X.

Haal je blok X weer weg, dan wordt Y(volgende)=X(volgende), Z(vorige)=X(vorige).

Dire updates, hoeveel blocks je ook hebt.
Klopt maar komt op zelfde neer. :)

En "whoami":

idd :) is ook zo ;) 'k Ga er ook niet veel tijd aan besteden. Heb al veel gehad aan jullie meningen dat het uberhaupt niet nodig is :)

Thanks!

BYD Tang Final Edition | 2x Marstek Venus 5.12KW | HW P1 | Homey Pro 2023


  • b03tz
  • Registratie: Augustus 2004
  • Laatst online: 16-11 09:45
Even off topic:

Is er hier ook een forum waar je een soort "Ik ben een CMS systeem aan het developpen iedereen kan meekijken en advies geven en ik post ook screenshots enzo" topic kan starten?

b03tz

BYD Tang Final Edition | 2x Marstek Venus 5.12KW | HW P1 | Homey Pro 2023


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
b03tz schreef op zaterdag 24 februari 2007 @ 12:16:
Even off topic:

Is er hier ook een forum waar je een soort "Ik ben een CMS systeem aan het developpen iedereen kan meekijken en advies geven en ik post ook screenshots enzo" topic kan starten?

b03tz
Nee, maar kijk eens op sitechecks.nl ofzo ;)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • b03tz
  • Registratie: Augustus 2004
  • Laatst online: 16-11 09:45
RobIII schreef op zaterdag 24 februari 2007 @ 12:16:
[...]

Nee, maar kijk eens op sitechecks.nl ofzo ;)
Thanks :p

BYD Tang Final Edition | 2x Marstek Venus 5.12KW | HW P1 | Homey Pro 2023

Pagina: 1