Hoofdcategorieën
Device Settings
Remember, Remember..

Ik ben bezig met het schrijven van een php klasse die voor mij in combinatie met MySQL een
bedrijvenlijst bijhoudt enb uitleest. Het is belangrijk dat in deze bedrijvenlijst geschoven kan worden van positie (De lijst is gebaseerd op een volgorde in prioriteit). Deze klasse gaat draaien in combinatie met een backend van een website en ik wil hierdoor niet teveel extra load toevoegen.

In de search kwam ik het volgende tegen:
[ASP/SQL] Records schuiven dmv Up/Down knop

Hier gaat het echter om MSSQL en is mij nog steeds niet duidelijk wat het efficienste is.

Nu wil ik met drie buttons (moveUp, moveDown, moveTop) de positie in de lijst kunnen veranderen. Probleem is dan er dan elke keer 2 queries nodig zijn (Update van het unieke ID, Update van alle die groter of kleiner zijn). Als een admin dus 10 keer op die moveUp drukt heb je in een hele korte tijd 20 queries te pakken)

Andere oplossing is clientside met inputs werken waarin de order ingevuld kan worden. Nadeel is dat met een lijst van 50 of 100 bedrijven het vervelend is als je al die nummertjes handmatig moet editen.

Heeft iemand een suggestie of idee?
code:
1
2
3
4
5
6
TABLE company
==============
company_id
name
address
order

Ik zou client side mbv javascript de volgorde bijhouden en het geheel bij een submit pas laten opslaan in de database.

Read the code, write the code, be the code!


Acties:


Janoz
Moderator Devschuur®
!litemod
Berichten: 18.485
Reg. datum: 19 oktober 2000

Leuk detail : Het in 1x opsturen van een lijst met 100 bedrijven met een volgnummer zorgt natuurlijk ook voor 100 update queries ;)..

Maar verder ben ik met wackmaniac. Gewoon leuk javascript waarmee je de boel op volgorde kunt zetten, en vervolgens een grote save (of submit) knop die de reaultaten in 1x opsturen.

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

Berichten: 7.586
Reg. datum: 12 oktober 2001

quote:
wackmaniac schreef op woensdag 02 mei 2007 @ 13:20:
Ik zou client side mbv javascript de volgorde bijhouden en het geheel bij een submit pas laten opslaan in de database.
Exact wat ik zou doen. Bij een submit de array met bedrijfsnamen / IDs opvangen, dit vergelijken met wat je op het moment in de database hebt staan en zonodig her en der wat updaten.
 
Je bent zelf hydrofiel.

Waarom maak je je druk om een paar update-query's? Stel dat er honderd items in je lijst staan, en het laatste wil je bovenaan hebben, tsja, dan worden er zo'n honderd query's uitgevoerd.

Dat is toch precies waar een database voor gemaakt is? Zo vaak zal die volgorde niet veranderen, tenminste, het lijkt me niet dat de gebruikers van die site continu de lijst zitten te sorteren...

\/ spuit 11 :P

CodeCaster wijzigde dit bericht 02-05-2007 13:26 (3%)

Nieuwste blog (31-01): Communicatie deel 6: de vaatwasser
Er zijn geen dieren fysiek of mentaal benadeeld tijdens het tikken van deze post. En ik vraag me af waarom niet.

getweakt...

Hoevaak verandert iemand nou de volgorde? De database heeft geen enkel probleem met die 2 queries die na iedere request binnenkomen, zolang het aantal bedrijven dat geupdate wordt niet ontzettend groot is en je ook nog veel indices hebt gedefinieerd op het volgorde-veld.

hoi Codecaster :'(

GlowMouse wijzigde dit bericht 02-05-2007 13:26 (6%)

jij ook?

Remember, Remember..

Ben niet zo'n held met javascript. Zou iemand mij een suggestie of tip kunnen doen waar ik naar zou moeten kijken?

Aan de andere kant zou je idd gewoon die update's voor lief kunnen nemen :p

GandalfTheGrey wijzigde dit bericht 02-05-2007 13:27 (25%)

Je bent zelf hydrofiel.

http://tool-man.org/examples/sorting.html

En dan bij het onClick() van de knop ervoor zorgen dat de volgorde (in dit geval gescheiden met pipes ( | )) ge-explodeerd wordt in php, dus onClick="window.location.href='verwerk.php?list='+list.getSequence()" of zo :)

CodeCaster wijzigde dit bericht 02-05-2007 13:31 (18%)

Nieuwste blog (31-01): Communicatie deel 6: de vaatwasser
Er zijn geen dieren fysiek of mentaal benadeeld tijdens het tikken van deze post. En ik vraag me af waarom niet.

Beer and Ice Hockey (2)

quote:
GandalfTheGrey schreef op woensdag 02 mei 2007 @ 13:17:
Als een admin dus 10 keer op die moveUp drukt heb je in een hele korte tijd 20 queries te pakken)
Die 20 queries voor een admin actie boeien niet. Wat boeit is dat er 10x geklikt en gewacht moet worden. Als vaak X keer een moveUp/MoveDown actie gedaan moet worden, is het wellicht handig om een interface aan te bieden waarbij je dmv een dropdown het veld kan selecteren waar het huidige record achter moet komen.

Talkin.nl daily photoblog
Day 2203: Beer and Ice Hockey (2)
Foto specs: Canon 50D, Tamron 17-50 f/2.8, 1/200s, f/8.0, ISO 100

Berichten: 1.722
Reg. datum: 14 januari 2000

Het is niet helemaal waar dat je dan 100 queries uitvoert. Je bepaalt het beginpunt (bijvoorbeeld positie 6), het eindpunt (bijvoorbeeld positie 5), en je verandert alleen de positie van die items die gelijk aan vijf of groter zijn maar kleiner dan zes door er 1 bij op te tellen. Omgekeerd kan dit ook.

Als je MySQL 5 gebruikt kun je eerst een paar variabelen definieren van de te schuiven rij als je die niet meteen meegeeft vanuit je interface.
sql:
1
UPDATE company SET order = order + 1 WHERE order < 6 AND order >= 5

Je kunt van te voren bepalen met een stukje script wat die integers zijn in deze query. Als je een item helemaal bovenaan zet in plaats van onderaan in een lijst van 200 wordt het dus vanzelf dit:
sql:
1
UPDATE company SET order = order + 1 WHERE order >= 1 AND order > 200

Als je met unique keys werkt moet je even aan de ORDER BY order DESC / ASC denken, anders gaat hij miepen.

Ik fix problemen die volgens de vorige ontwikkelaar in werkelijkheid toch nooit zouden voorkomen.


Acties:


Janoz
Moderator Devschuur®
!litemod
Berichten: 18.485
Reg. datum: 19 oktober 2000

De twee update queries werken alleen als je maar 1 item verplaatst. Zodra je eigenlijk je hele lijstje om hebt kunnen gooien wordt het een heel stuk lastiger om te bepalen welke queries er allemaal uitgevoerd moeten worden.

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

Berichten: 7.586
Reg. datum: 12 oktober 2001

quote:
Janoz schreef op woensdag 02 mei 2007 @ 14:12:
De twee update queries werken alleen als je maar 1 item verplaatst. Zodra je eigenlijk je hele lijstje om hebt kunnen gooien wordt het een heel stuk lastiger om te bepalen welke queries er allemaal uitgevoerd moeten worden.
Rauw geschreven:
PHP:

1
2
3
4
5
6
7
8
9
<?php
$bedrijvenarray = $_POST['bedrijvenlijst'];

foreach($bedrijvenarray as $bedrijfid->$bedrijfgegevens){

if ($bedrijfgegevens["Rang"] != $databaseobject[$bedrijfid]["Rang"]){
mysql_query("UPDATE...");
}

}
?>

Is in principe goed te doen.
 

Acties:


Janoz
Moderator Devschuur®
!litemod
Berichten: 18.485
Reg. datum: 19 oktober 2000

Dat zijn niet de type queries uit de post waarop ik reageerde. Wat jij hier weergeeft is juist de fictieve 100 queries waar ik het over had (1 item naar de top verplaatsen zorgt er immers voor dat alle order waardes anders zijn).

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

Berichten: 7.586
Reg. datum: 12 oktober 2001

Ik reageerde dan ook op het "Zodra je eigenlijk je hele lijstje om hebt kunnen gooien wordt het een heel stuk lastiger om te bepalen welke queries er allemaal uitgevoerd moeten worden." gedeelte, aangezien dat qua code goed te doen is.
 

Acties:


Janoz
Moderator Devschuur®
!litemod
Berichten: 18.485
Reg. datum: 19 oktober 2000

Dat is allemaal heel leuk en aardig, maar lees nog even de post van Bikkelz waarin hij aangeeft dat het op zijn manier geen 100 queries zouden zijn, waarop ik zeg dat zijn manier erg lastig wordt wanneer er meer items verplaatst zijn. Daaruit verplaats queries afleiden is erg lastig en dan is inderdaad 'de 100 queries' manier die ik eerder aangaf, en die jij nu uitgewerkt hebt, een stuk makkelijker.

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

Berichten: 7.586
Reg. datum: 12 oktober 2001

quote:
Janoz schreef op woensdag 02 mei 2007 @ 15:33:
Dat is allemaal heel leuk en aardig, maar lees nog even de post van Bikkelz waarin hij aangeeft dat het op zijn manier geen 100 queries zouden zijn, waarop ik zeg dat zijn manier erg lastig wordt wanneer er meer items verplaatst zijn. Daaruit verplaats queries afleiden is erg lastig en dan is inderdaad 'de 100 queries' manier die ik eerder aangaf, en die jij nu uitgewerkt hebt, een stuk makkelijker.
In dat geval kun je ook elke user interactie bijhouden, dat elke keer bij het klikken op "Zet dit bedrijf 1 rang hoger" er aan de array "interactie_geschiedenis" een item toegevoegd wordt.

Bij het submitten van het form vervolgens kijken op welke knoppen er geklikt is, en dit in query's vertalen. Easy peazy :)
 

Acties:


Janoz
Moderator Devschuur®
!litemod
Berichten: 18.485
Reg. datum: 19 oktober 2000

Tja, en toen was ondertussen al door iemand anders de volgorde aangepast waardoor je uitgaat van een andere beginstand en is het resultaat al helemaal niet wat je verwacht.

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

Berichten: 2.023
Reg. datum: 24 augustus 2005

In MySQL zou je gebruik kunnen maken van de functie ELT... maar er is in MSSQL volgens mij geen vergelijkbare functie....

als je dan met Javascript al je regels opnieuw geordend hebt, kun je in 1 statement alles updaten:
sql:
1
2
3
4
UPDATE
    company
SET
    order = ELT(order121191081234657)

waarbij de argumenten van ELT zijn: oude ordernummer en daarna op de positie van het oude ordernummer in de argumentenlijst het nieuwe ordernummer... (dus het eerste ordernummer wordt nu op positie 12 geordend, het tweede op positie 11, etc)

maar nogmaals, volgens mij bestaat er geen vergelijkbare functie in MSSQL

overigens zou ik het veld "order" even een andere naam geven... is een reserved word...

P.O. Box wijzigde dit bericht 02-05-2007 15:48 (13%)

 
Remember, Remember..

Bedankt voor de reacties allemaal. Ik heb momenteel de javascript oplossing geimplementeerd met gebruik van ELT statement (perfect!)

Enige probleem is dat de backend alle lijsten in tabelformaat weergeeft. Het gebruik van JavaScript TOOLMAN vereist <LI> items. Dit vloekt dus nogal met de layout van de andere pagina's.
Is er een manier om Tabel Rows als <li> item te gebruiken?

edit:
order inderdaad gerenamed naar priority

GandalfTheGrey wijzigde dit bericht 02-05-2007 16:13 (16%)

Berichten: 1.235
Reg. datum: 21 februari 2001

Ik heb het script van toolman aangepast dat ie ook met tables werkt... als je interesse hebt, laat maar horen, dan kan ik wel een voorbeeldje ergens neerzetten.

PS. Het werkt alleen met tables met een border=0, geen zin om uit te zoeken waarom ;) Naja hij werkt wel, maar dan schuift ie beetje vaag op naar rechts als je vertikaal gaat draggen.... Ow en als laatste: volgens mij werkt ie alleen goed in IE :P

reddevil wijzigde dit bericht 02-05-2007 16:24 (25%)

Vaelaa - Human Warlock 85 @ Sunstrider

Remember, Remember..

Daar zou je me een groot plezier mee doen :) Gebruik zelf ook border=0.
Je bent zelf hydrofiel.

Euh... <li class="order_li">, en die dan in je CSS declareren?

Nieuwste blog (31-01): Communicatie deel 6: de vaatwasser
Er zijn geen dieren fysiek of mentaal benadeeld tijdens het tikken van deze post. En ik vraag me af waarom niet.

Moutarde apres le diner
Berichten: 1.929
Reg. datum: 26 februari 2002

Dit lijkt me nu eindelijk eens zo'n typisch gevalletje waar het overhypte AJAX wél voor een handige interface kan zorgen :) Of is dat wat over de top voor TS?

Religion has no place in public schools the way facts have no place in organized religion

Remember, Remember..

quote:
CodeCaster schreef op woensdag 02 mei 2007 @ 18:11:
Euh... <li class="order_li">, en die dan in je CSS declareren?
Het gaat erom dat ik een lijst heb die er zo uit ziet:
code:
1
2
3
4
5
6
===============================================
# CompanyName   Website     E-mail
1   KPN          kpn.nl     info@kpn.nl
2   Bedrijf X    x-bus.nl   blaat@blaat.nl

========================================

Het enige wat ik wil is dat deze rijen dus onderling kan swappen en dit opslaan.
Weet niet of ik met LI style hetzelfde kan bereiken op een makkelijke manier?

AJAX interface is misschien net iets over de top :p

GandalfTheGrey wijzigde dit bericht 02-05-2007 18:43 (29%)

Je kan natuurlijk ook een wat eenvoudigere versie maken waarbij je bijvoorbeeld twee bedrijven van plaats laat wisselen, of een exacte plek meegeeft waar een bedrijf moet komen te staan. In dit geval heb je slechts 2 update queries, die dus de order value van de twee bedrijven omwisselt.

Het is natuurlijk maar de vraag of dit aan je wensen voldoet, maar in ieder geval weer een alternatief! (lijkt me ook wat meer bruikbaar als je bijvoorbeeld iets van plaats 99 naar 50 wil verplaatsen en je geen gebruik maakt van het eerder voorgestelde javascript voorstel)
 

Acties:


Janoz
Moderator Devschuur®
!litemod
Berichten: 18.485
Reg. datum: 19 oktober 2000

Wat je daar laat zien is gewoon een tabel. Ik zie niet in waarom je daarvoor een li zou moeten misbruiken aangezien een li gemaakt is voor een lijstje van elementen, en niet tabulaire data (lees: met kolommen).

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

Berichten: 1.235
Reg. datum: 21 februari 2001

quote:
GandalfTheGrey schreef op woensdag 02 mei 2007 @ 16:32:
Daar zou je me een groot plezier mee doen :) Gebruik zelf ook border=0.
Voor de liefhebber:
http://home.hccnet.nl/reddevil/tablesort.zip

Als iemand nog zin en tijd heeft om 't probleem van de border=1 op te lossen of ze kunnen het werkend krijgen onder diverse andere browsers.... &gt;:) &gt;:)

PS. Kan zijn dat er in de html nog wat onzin code staat, maar dat kan je eenvoudig strippen.

reddevil wijzigde dit bericht 03-05-2007 09:41 (36%)

Vaelaa - Human Warlock 85 @ Sunstrider

Remember, Remember..

Bedankt reddevil. Alleen werkt volgens mij de "klik" showAll niet en de serializeList geeft niks terug.
quote:
Janoz schreef op donderdag 03 mei 2007 @ 09:26:
Wat je daar laat zien is gewoon een tabel. Ik zie niet in waarom je daarvoor een li zou moeten misbruiken aangezien een li gemaakt is voor een lijstje van elementen, en niet tabulaire data (lees: met kolommen).
Inderdaad. Daarom ben ik nu ook aan het proberen de TOOLMAN te editen voor tables.

GandalfTheGrey wijzigde dit bericht 03-05-2007 12:13 (79%)

Berichten: 1.235
Reg. datum: 21 februari 2001

quote:
GandalfTheGrey schreef op donderdag 03 mei 2007 @ 12:05:
Bedankt reddevil. Alleen werkt volgens mij de "klik" showAll niet en de serializeList geeft niks terug.
De klik laat alleen zien welke rows aangevinkt zijn met de checkbox voor de row.

geen idee wat de serializeList exact doet, maar zoals ie bij mij nu werkt kan ik gewoon de volgordes ophalen door een javascriptje te gebruiken die de tabel row voor row doorloopt (beetje zoals de showAll doet).

Vaelaa - Human Warlock 85 @ Sunstrider

Remember, Remember..

Het javascript werkt nu volledig goed :)

Alleen SQL statement lijkt niks te doen?!

Affected rows: 0 (Query took 0.0004 sec)
SQL query: UPDATE company SET priority = ELT( priority, 2, 1 )
Berichten: 2.023
Reg. datum: 24 augustus 2005

die query werkt alleen voor rijen die al bestaan in de database he? m.a.w. bestaan er wel rijen in je tabel... en hebben deze nu als priority ook 1 en 2.... nadeel van dit systeem is nl wel dat je netjes moet ordenen...
 
Remember, Remember..

Volgens mij is er een probleem als er 1 rij verwijdert wordt en de nummers niet meer oplopend zijn. Klopt dit?
Berichten: 2.023
Reg. datum: 24 augustus 2005

dat klopt in principe ja... ELT is een leuke functie, maar je moet hem exact goed gebruiken in dit geval.. anders heeftie geen goed effect...

je kunt denk ik het best ook in het javascript zorgen dat je nummers oplopend blijven...
en verwijderde rijen misschien vervangen door 0 of NULL en daarna de velden met priority 0 of NULL verwijderen...

P.O. Box wijzigde dit bericht 04-05-2007 15:44 (42%)

 
Remember, Remember..

Op een of andere manier krijgen twee bedrijven elke x priority = 0 na de Update.
Moet de oude situatie (IN de database) ook een oplopend rijtje zijn ?


Mijn javascript geeft gewoon dit door (Rij met alle company ID's in volgorde gescheiden door pipes):
?action=order&order=0|94|21|20|26|22|23|24|28|29|50|48|52..|95|17

Vervolgens krijgen company 95 en 17 elke keer priority 0 van ELT. Terwijl alle andere priority's wel goed en oplopend kloppen?! Verder lijkt hij sommige wijzingen wel op te slaan en andere niet :p


Mijn code (PHP4 server)
Ik doe eerst een substring waarin ik de eerste twee tekens verwijder, omdat het javascript ook de tableheadrow meegeeft (die heeft standaard id=0)
PHP:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php
    function saveOrder($order){

        $order = substr($order2strlen($order)-1);
        $aOrder = explode("|"$order);        
        //array van oldorder => company_id
        $oud = array();
        $sQuery = "SELECT company_id FROM company ORDER BY priority";
        $rQuery = mysql_query($sQuery);
        $i = 1;
        while($aQuery = mysql_fetch_array($rQuery)){
            $oud[$i] = $aQuery['company_id'];
            $i++;
        }
        //array van company_id => neworder
        $nieuw = array();
        $j = 1;
        foreach($aOrder as $company){
            $nieuw[$company] = $j;
            $j++;
        }
        $nieuwevolgorde = "";
        foreach($oud as $key => $value){
            $nieuwevolgorde .= $nieuw[$value] . ", ";
        }
        $nieuwevolgorde = substr($nieuwevolgorde0-2);
        
        $sQuery = "UPDATE company SET priority = ELT(priority, ".$nieuwevolgorde.")";
?>

GandalfTheGrey wijzigde dit bericht 04-05-2007 17:12 (139%)

Berichten: 2.023
Reg. datum: 24 augustus 2005

eerst even een vraag: begrijp je de functie ELT? dan zou je er in principe uit moeten kunnen komen...
de originele prioriteiten hoeven niet perse oplopend te zijn... wel moet de ELT functie aangeroepen worden met minimaal de originele prioriteit aantal aan argumenten... zo niet, dan geeft hij null terug....

het is niet de meest ideale functie hiervoor, maar wel als je in 1 statement de volgorde wilt updaten... vereiste is dus wel dat je netjes nummert...
op zich moet dat ook geen probleem zijn... je begint bij 1... en een volgende rij wordt altijd max + 1... als je rijen verwijdert doe je de ELT actie, waardoor de nummering daarna weer OK zou moeten zijn... als je het netjes doet kan het niet fout gaan...

edit: oh, je hebt wat toegevoegd... ff bekijken...

P.O. Box wijzigde dit bericht 04-05-2007 17:11 (3%)

 
Remember, Remember..

Ik snap het principe van de ELT functie wel, maar ik heb het gevoel dat ik ergens iets mis.
Berichten: 2.023
Reg. datum: 24 augustus 2005

de code ziet er op zich goed uit... ik denk dat je even wat print_r-en er tussen moet gooien om te kijken wat er nou waar in de code staat... ik heb het vermoeden dat $oud niet evenlang is als $nieuw... terwijl die wel even lagn moeten zijn... verwijderde items moet je namelijk niet uit $nieuw verwijderen, maar voorzien van 0 bijvoorbeeld... ook al heb je ze namelijk inmiddels verwijderd... de oude volgordenummering weet dat nog niet...

P.O. Box wijzigde dit bericht 04-05-2007 17:22 (13%)

 
Remember, Remember..


PHP:

1
2
3
4
5
6
7
8
<?php
    function delete($company_id){
        // Delete the company
        $sQuery = sprintf("DELETE FROM company WHERE company_id=%d LIMIT 1"$company_id);        
        if($rQuery = mysql_query($sQuery)){
            return true;
        }
        return false;    
    }
?>

Het deleten gebeurd real-time. Misschien moet ik hier dan gewoon een UPDATE statement bijgooien waarin ik alles > company_id priority = priority -1 doe?
Berichten: 2.023
Reg. datum: 24 augustus 2005

je bedoelt dat als je verwijderd, dat dan direct de betreffende rij uit de database wordt verwijderd? en wordt dan je overzicht opnieuw getoond of doe je het verwijderen dan met ajax ? m.a.w. is $oud op het moment van zenden (en dus voor de database bewerkingen) nog wel exact gelijk aan wat er in je database staat?
 
Remember, Remember..

overzicht wordt opnieuw getoond. $oud klopt met wat er in de database staat.
De arrays zijn ook even groot. Maar bij het deleten wordt de volgorde dus NIET geupdate en krijg je gaps in de priority volgorde.
Berichten: 2.023
Reg. datum: 24 augustus 2005

eigenlijk moeten de verwijderde items wel nog worden meegegeven in de prioriy lijst.... met 0 ofzo... boeit niet, de update ziet ze toch niet, maar de overige priorities staan wel op hun plaats...

kun je anders even het resultaat van dit posten:
na $Query = "UPDATE .... ";
PHP:

1
2
3
<?php
print_r($oud);
print_r($nieuw);
print_r($nieuwevolgorde);
?>

 
Remember, Remember..


code:
1
2
3
4
5
6
7
8
Oud = Order => Company_ID
Oud ( [1] => 17 [2] => 95 [3] => 94 [4] => 21 [5] => 26 [6] => 20 [7] => 23 [8] => 22 [9] => 24 [10] => 28 [11] => 29 [12] => 50 [13] => 48 [14] => 52 [15] => 55 [16] => 31 [17] => 33 [18] => 16 [19] => 34 [20] => 37 [21] => 35 [22] => 36 [23] => 30 [24] => 38 [25] => 39 [26] => 40 [27] => 41 [28] => 25 [29] => 42 [30] => 43 [31] => 45 [32] => 44 [33] => 46 [34] => 47 [35] => 49 [36] => 32 [37] => 53 [38] => 54 [39] => 56 [40] => 58 [41] => 51 [42] => 15 [43] => 57 [44] => 18 [45] => 60 [46] => 61 [47] => 62 [48] => 63 [49] => 64 [50] => 65 [51] => 66 [52] => 67 [53] => 68 [54] => 69 [55] => 70 [56] => 71 [57] => 72 [58] => 73 [59] => 74 [60] => 75 [61] => 76 [62] => 78 [63] => 77 [64] => 79 [65] => 81 [66] => 89 [67] => 82 [68] => 83 [69] => 84 [70] => 85 [71] => 88 [72] => 90 [73] => 91 [74] => 105 [75] => 99 [76] => 101 [77] => 92 [78] => 14 [79] => 19 [80] => 86 [81] => 59 [82] => 27 [83] => 87 [84] => 96 [85] => 93 [86] => 97 [87] => 98 [88] => 100 [89] => 102 [90] => 103 [91] => 104 [92] => 106 ) 

Nieuw = Company ID => Nieuw Orde
Nieuw ( [17] => 1 [95] => 2 [94] => 3 [21] => 4 [26] => 5 [20] => 6 [23] => 7 [22] => 8 [24] => 9 [28] => 10 [29] => 11 [50] => 12 [48] => 13 [52] => 14 [55] => 15 [31] => 16 [33] => 17 [16] => 18 [34] => 19 [37] => 20 [35] => 21 [36] => 22 [30] => 23 [38] => 24 [39] => 25 [40] => 26 [41] => 27 [25] => 28 [42] => 29 [43] => 30 [45] => 31 [44] => 32 [46] => 33 [47] => 34 [49] => 35 [32] => 36 [53] => 37 [54] => 38 [56] => 39 [58] => 40 [51] => 41 [15] => 42 [57] => 43 [18] => 44 [60] => 45 [61] => 46 [62] => 47 [63] => 48 [64] => 49 [65] => 50 [66] => 51 [67] => 52 [68] => 53 [69] => 54 [70] => 55 [71] => 56 [72] => 57 [73] => 58 [74] => 59 [75] => 60 [76] => 61 [78] => 62 [77] => 63 [79] => 64 [106] => 65 [81] => 66 [89] => 67 [83] => 68 [84] => 69 [85] => 70 [88] => 71 [90] => 72 [91] => 73 [105] => 74 [99] => 75 [101] => 76 [92] => 77 [14] => 78 [19] => 79 [86] => 80 [59] => 81 [27] => 82 [87] => 83 [96] => 84 [93] => 85 [97] => 86 [98] => 87 [100] => 88 [102] => 89 [103] => 90 [104] => 91 [82] => 92 ) 

Nieuwevolgorde = lijst nieuwe volgorde's
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 66, 67, 92, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 65

Berichten: 2.023
Reg. datum: 24 augustus 2005

ik bedenk me ineens nog iets...
toen ik die ELT functie voorstelde, had ik in gedachte dat je oude priorities, naar nieuwe priorities ging zetten, zonder ID's e.d. te weten... jij kwam echter met een code waarbij je de ID's op een volgorde in een array zette.... om dan ELT te gebruiken geeft een heel geklooi met "nieuwevolgorde" zoals je zelf al zag...
nu bedacht ik me net dat de FIELD functie eigenlijk nog veel makkelijker is als je ID's gebruikt...

je hebt een array $order, met daarin de ID's op de nieuwe volgorde...
dan doe je:
PHP:

1
<?php
$sQuery = "UPDATE company SET priority = FIELD(id, " . implode($order",") . ")";
?>

FIELD geeft de positie van id terug in de lijst....

scheelt je een hoop code lijkt me...
 
Berichten: 6.610
Reg. datum: 26 oktober 2002

Chique!

Enige probleem wat open blijft staan is dat meerdere mensen in de database kunnen werken. Stel dat ik een rij verwijder en er een paar toevoeg terwijl iemand anders in JavaScript aan het sorteren is dan heb je een probleem.

Een website voor maar ¤ 999 nu tijdelijk 499 op maat ontworpen! GO-ON.nl Goedkope Websites!

Berichten: 2.023
Reg. datum: 24 augustus 2005

quote:
GandalfTheGrey schreef op zaterdag 05 mei 2007 @ 11:57:
code:
1
2
3
4
5
6
7
8
Oud = Order => Company_ID
Oud ( [1] => 17 [2] => 95 [3] => 94 [4] => 21 [5] => 26 [6] => 20 [7] => 23 [8] => 22 [9] => 24 [10] => 28 [11] => 29 [12] => 50 [13] => 48 [14] => 52 [15] => 55 [16] => 31 [17] => 33 [18] => 16 [19] => 34 [20] => 37 [21] => 35 [22] => 36 [23] => 30 [24] => 38 [25] => 39 [26] => 40 [27] => 41 [28] => 25 [29] => 42 [30] => 43 [31] => 45 [32] => 44 [33] => 46 [34] => 47 [35] => 49 [36] => 32 [37] => 53 [38] => 54 [39] => 56 [40] => 58 [41] => 51 [42] => 15 [43] => 57 [44] => 18 [45] => 60 [46] => 61 [47] => 62 [48] => 63 [49] => 64 [50] => 65 [51] => 66 [52] => 67 [53] => 68 [54] => 69 [55] => 70 [56] => 71 [57] => 72 [58] => 73 [59] => 74 [60] => 75 [61] => 76 [62] => 78 [63] => 77 [64] => 79 [65] => 81 [66] => 89 [67] => 82 [68] => 83 [69] => 84 [70] => 85 [71] => 88 [72] => 90 [73] => 91 [74] => 105 [75] => 99 [76] => 101 [77] => 92 [78] => 14 [79] => 19 [80] => 86 [81] => 59 [82] => 27 [83] => 87 [84] => 96 [85] => 93 [86] => 97 [87] => 98 [88] => 100 [89] => 102 [90] => 103 [91] => 104 [92] => 106 ) 

Nieuw = Company ID => Nieuw Orde
Nieuw ( [17] => 1 [95] => 2 [94] => 3 [21] => 4 [26] => 5 [20] => 6 [23] => 7 [22] => 8 [24] => 9 [28] => 10 [29] => 11 [50] => 12 [48] => 13 [52] => 14 [55] => 15 [31] => 16 [33] => 17 [16] => 18 [34] => 19 [37] => 20 [35] => 21 [36] => 22 [30] => 23 [38] => 24 [39] => 25 [40] => 26 [41] => 27 [25] => 28 [42] => 29 [43] => 30 [45] => 31 [44] => 32 [46] => 33 [47] => 34 [49] => 35 [32] => 36 [53] => 37 [54] => 38 [56] => 39 [58] => 40 [51] => 41 [15] => 42 [57] => 43 [18] => 44 [60] => 45 [61] => 46 [62] => 47 [63] => 48 [64] => 49 [65] => 50 [66] => 51 [67] => 52 [68] => 53 [69] => 54 [70] => 55 [71] => 56 [72] => 57 [73] => 58 [74] => 59 [75] => 60 [76] => 61 [78] => 62 [77] => 63 [79] => 64 [106] => 65 [81] => 66 [89] => 67 [83] => 68 [84] => 69 [85] => 70 [88] => 71 [90] => 72 [91] => 73 [105] => 74 [99] => 75 [101] => 76 [92] => 77 [14] => 78 [19] => 79 [86] => 80 [59] => 81 [27] => 82 [87] => 83 [96] => 84 [93] => 85 [97] => 86 [98] => 87 [100] => 88 [102] => 89 [103] => 90 [104] => 91 [82] => 92 ) 

Nieuwevolgorde = lijst nieuwe volgorde's
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 66, 67, 92, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 65

grappig, net toen ik mijn nieuwe oplossing aan het posten was, postte jij dit.... ik denk dat je met de nieuwe oplossing hier geen antwoord meer op hoeft, maar mocht dat wel zo zijn: is het mogelijk om het met een kleinere set te testen? ik kan hier nl. niet echt een fout in vinden, maar misschien komt dat omdat ik door de enorme hoeveelheid getallen...
 
Berichten: 2.023
Reg. datum: 24 augustus 2005

quote:
djluc schreef op zaterdag 05 mei 2007 @ 12:09:
Chique!

Enige probleem wat open blijft staan is dat meerdere mensen in de database kunnen werken. Stel dat ik een rij verwijder en er een paar toevoeg terwijl iemand anders in JavaScript aan het sorteren is dan heb je een probleem.
dat hou je natuurlijk altijd als je eerst een hele lijst bewerkingen doet alvorens daadwerkelijk de opdracht naar de database te sturen....
 
Remember, Remember..

Geweldig het werkt :) de functie saveOrder is nu maar 3 of 4 lines :D
Berichten: 2.023
Reg. datum: 24 augustus 2005

quote:
GandalfTheGrey schreef op zaterdag 05 mei 2007 @ 13:25:
Geweldig het werkt :) de functie saveOrder is nu maar 3 of 4 lines :D
super! twas leuk om mee te denken!
 

Pagina: 1



VNU Media logo Hosted by True

© 1998 - 2012 Tweakers.net B.V. - Alle rechten voorbehouden - Contact - Jouw privacy - Algemene Voorwaarden

Uitgever van:

Website van het jaar 2011