Just nu i M3-nätverket
Gå till innehåll

swap id i mysql databas


happyfejs

Rekommendera Poster

Om jag ska byta id på artiklar i en databas med varandra så antar jag att man får sätta ett id till ett temporärt och bara byta sen, men om jag har låt säga 10 artiklar som jag vill ordna i en lista, hur bär jag mig åt då? Bifogar en bild för att visa exempel..

 

Coolast av allt hade ju varit nån form av javascript så man bara kan dra den till den positionen man vill ha den på, men känns lite overkill!

 

Tack på förhand

post-57316-0-18636300-1301561553_thumb.png

Länk till kommentar
Dela på andra webbplatser

Det är bättre att du har en separat nyckel för sortering i databastabellen, t ex "sortindex" som du gör en ORDER BY på.

Länk till kommentar
Dela på andra webbplatser

Mr Andersson

Är det verkligen id du vill ändra? Det får oftast oanade konsekvenser.

 

Jag gissar att det är ett sorteringsindex du har. Då hade jag lagt dem i 10-intervall, alltså 10, 20, 30 etc. För att lägga 10 mellan 20 och 30 sätter du värdet till 25. Efter det kör du en rutin som sorterar och bygger ett nytt 10-interval.

Länk till kommentar
Dela på andra webbplatser

hmm, funderade på att skapa en egen kolumn för det, men då måste jag ju hämta data från databasen först för att se vilket förra sortindex är eller?

 

Tänkte mest att det var smidigt med id:et, men det kanske är att skjuta sig själv i foten..

Länk till kommentar
Dela på andra webbplatser

Mr Andersson

hmm, funderade på att skapa en egen kolumn för det, men då måste jag ju hämta data från databasen först för att se vilket förra sortindex är eller?

 

Hur hämtar du id och beskrivning nu? Lägg bara till ett sortindex-fält.

Att ändra id för att sortera på ett annat sätt, är aldrig en bra idé.

Länk till kommentar
Dela på andra webbplatser

Nej, du behöver inte hämta sortindex, men dock sortera på det när du gör hämtningen ut databasen.

 

Man kan göra lite så här:

 

http://demo.allstarsmedia.se/sortables.html

 

i id tillhörande varje li skriver man ut postens idvärde (inte sortindex)

Sedan när man sparar skickar man in den serialiserade strängen så har man alla id i den sorteringsordning man önskar så är det bara att loopa igenom och uppdatera sortindexet på serversidan.

Länk till kommentar
Dela på andra webbplatser

Hmm, jag förstår logiken, verkar vettigt..Nu är det bara det praktiska kvar, har lagt till sortIndex i databasen nu iaf och det jag menade med att hämta var ju för att veta vilket sortIndex nästa artikel ska få när man lägger upp den? Eller ska den vara tom tills man har sorterat?

 

Den sidan du posta är ju asnajs, är det nån funktion som finns att tillgå?

Länk till kommentar
Dela på andra webbplatser

Nej sortindex behöver du aldrig hämta. Du ska ju bara presenter efter en viss ordning vilket mysql (eller motsvarande) sköter åt dig.

 

Är det så att du ska skapa en helt ny artikel kan man sätta default som 99 eller hämta ut det högsta sortindex-ärdet från tabellen och plussa på ett.

 

biblioteken är jquery och jquery.ui som går att hämta från jquery.com eller länka in med hjälp av google ajax api som jag gjort.

 

Fritt fram att sno all min kod på den sidan jag länkade till.

Länk till kommentar
Dela på andra webbplatser

yes, det var ditt andra stycke där jag menade om man måste sätta nått värde när man lägger till artikeln, nu har jag gjort så den plussar på med 10 från förra artikeln som mr andersson föreslog.

 

Det är en najs funktion du gjort, jQuerys ui är bra :P

Det enda jag inte förstår är den här raden

alert($(this).sortable("serialize",{key:"id"}));

 

Eller hur jag loopar fram i vilket ordning de ligger över huvudtaget :S

Länk till kommentar
Dela på andra webbplatser

måste id:et börja med 1 och fortsätta uppåt utan avbrott? Nu heter mina som det unika id:et

 

EDIT: testade att byta till samma id som dig dvs item-9 osv..då funkade det? Hur kommer det sig?

Länk till kommentar
Dela på andra webbplatser

<li id="item-71"> där 71 i id representerar postens id från databasen, detta måste du programmera att den skriver ut i loopen.

 

Du vet väl hur du hämtar från databastabellen?

Du gör en "ORDER BY sortindex" så får du fram rätt ordning (se till att du redan lagt in en sorteringsordning i direkt i databasen så du har något att arbeta med)

 

alert($(this).sortable("serialize",{key:"id"}));

Ovanstående är endast för att kunna se att den gjort en sortering.

Med fördel lägger du serialiseringen i ett hidden-fält och postar i ett formulär när man klickar på en sparaknapp, eller löser med ajax.

Helt upp till dig men jag rekommenderar att du börjar med en formulärpostning

Länk till kommentar
Dela på andra webbplatser

Jo det fattar jag hur man namnger dem, men varför måste det vara item-# för att funka? Först hade jag article-#

EDIT:Nu funkade det med aricle också, kom på att jag nog inte hade ett "-" med i id:et, läste på jQuery ui serialize funktionen och kom på vad det var för fel :)

 

Jag ska försöka få till ajaxen, har ju sen tidigare en funktion som sparar ut eller tar bort en rad ur databasen, så kan ju inte vara jättemycket svårare än det :) Enda frågan, hur skickar man en array via ajaxen? Finns säkert hur mycket som helst på det på google, har inte kollat än..

Länk till kommentar
Dela på andra webbplatser

med ajax skickar du den serialiserade strängen med data-metoden

 

function postform(){	
var _q = $(".sort").sortable("serialize");
$.ajax({
  url: 'process-sortable2.php',
  type: "POST",
  data: _q,
  success: function(data) {
	displayResult(data);
  },
  error: function(){
	displayResult("Något gick fel");
  }
});
}

i min lista står det "item-xx" i id där xx är idnumret.

 

på phpsidan loopar man genom alla postade fält med

foreach ($_POST['item'] as $position => $item) :
$sql[] = "UPDATE `table` SET `position` = $position WHERE `id` = $item";
//uppdatera databasen här!
endforeach;

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...