tutorials.de Buch-Aktion 02/2012
Like Tree1Danke
  • 1 Beitrag von kuddeldaddeldu
ERLEDIGT
NEIN
ANTWORTEN
8
ZUGRIFFE
1552
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Every_b Every_b ist offline Mitglied Silber
    Registriert seit
    May 2005
    Beiträge
    56
    Hallo Leute!

    Ich habe ein Script geschrieben, schon etwas her, in der einfach Datensätze hinzugefügt werden können, gelöscht, Editiert.
    Jeder Datensatz besitzt eine SortID - bei Hinzufügen eines neuen Datensatzes, erhöht sich JEDE andere SortID um 1, damit ich dann nach SortID sortieren kann und meine Reihenfolge habe. (Neuesten oben usw.)

    Nun scheitere ich daran:
    Ich möchte, dass man die Datensätze verschieben kann.
    Sprich wie man es kennt: Pfeil nach oben oder pfeil nach unten.
    Das Problem dabei:
    Wenn ich z.B. zwischendrin einen Datensatz lösche, entstehen Lücken in der SortID (also nicht 1, 2, 3, 4 - sondern manchmal 1,4,5,8,9)

    Hat jemand irgendeine Idee wie ich es mit diesem SortID System realisieren kann?!
    Eine Idee: Die nächst höhere/niedrigere SortID auslesen, und dann die eigene SortID eins drüber/niedriger. (Wie das geht? Ich habe leider keine Ahnung ) Das würde zwar vorraussetzen dass ich alle SortIDs beim Hinzufügen um 2 erhöhe, damit Lücken zwischen den Werten entstehen, aber das ist ja kein Problem.

    Falls noch Fragen offen sind, bitte fragt
    Wäre euch seehr dankbar wenn ihr mir helfen könnt.
     

  2. #2
    Registriert seit
    Dec 2002
    Ort
    Trier
    Beiträge
    17.502
    Blog-Einträge
    10
    Aber es ist doch eigentlich egal, ob die Nummer zur Bestimmung der Reihenfolge fortlaufend oder aber unterbrochen ist. Denn sortiert wird in beiden Fällen identisch.
     
    Markus Wulftange

  3. #3
    Every_b Every_b ist offline Mitglied Silber
    Registriert seit
    May 2005
    Beiträge
    56
    Da hast du Recht Gumbo, vielleicht habe ich mich da falsch ausgedrückt
    Sie muss für mich nicht in Reihenfolge und schon gar nicht fortlaufend sein, Lücken werden so und so entstehen, wenn mittendrin Datensätze gelöscht werden.

    Das Ziel ist einfach: Die SortID des Datensatzes den ich verschieben will, um einen Wert höher/niedriger zu bringen als der NÄCHST höhere/niedrigere, damit neu sortiert wird und der Datensatz dementsprechend die position verändert.

    Hoffe es ist klar was ich meine Wenn nicht einfach fragen
     

  4. #4
    Registriert seit
    Dec 2002
    Ort
    Trier
    Beiträge
    17.502
    Blog-Einträge
    10
    Prinzipiell müsste es wie folgt funktionieren: SortID wird verringert (neue Position < alte Position):
    Code :
    1
    2
    
    UPDATE `Tabelle` SET `SortID` = `SortID`+1 WHERE `SortID` BETWEEN [font=serif]〈[i]neue Position[/i]〉[/font] AND [font=serif]〈[i]alte Position[/i]〉[/font]-1;
    UPDATE `Tabelle` SET `SortID` = [font=serif]〈[i]neue Position[/i]〉[/font] WHERE `ID` = [font=serif]〈[i]ID[/i]〉[/font]
    Beziehungsweise erhöht (neue Position > alte Position):
    Code :
    1
    2
    
    UPDATE `Tabelle` SET `SortID` = `SortID`-1 WHERE `SortID` BETWEEN [font=serif]〈[i]alte Position[/i]〉[/font]+1 AND [font=serif]〈[i]neue Position[/i]〉[/font];
    UPDATE `Tabelle` SET `SortID` = [font=serif]〈[i]neue Position[/i]〉[/font] WHERE `ID` = [font=serif]〈[i]ID[/i]〉[/font]
    Wobei ID die ID des zu verschiebenden Datensatzes ist.
     
    Markus Wulftange

  5. #5
    Every_b Every_b ist offline Mitglied Silber
    Registriert seit
    May 2005
    Beiträge
    56
    Ich verstehe die Lösung von dir noch nicht ganz, aber ich probiers gleich mal aus, bei mir dauerts manchmal ein wenig bis es klick macht danke schonmal im Vorraus, ich melde mich wenn ich dahinter gekommen bin!
     

  6. #6
    Darian Darian ist offline Mitglied Platin
    Registriert seit
    Feb 2003
    Ort
    Guatemala
    Beiträge
    512
    Hallo Leute,

    ich weiß dieser Beitrag ist schon alt, aber ich muss da doch auch noch einmal ein wenig meinen Senf dazu geben.

    Ich habe derzeit das selbe Problem, und in meinem Fall ist es wie folgt:

    Prinzipiell müsste es wie folgt funktionieren: SortID wird verringert (〈neue Position〉 < 〈alte Position〉):
    Also wenn SortID verringert wird, verschiebt sich der Eintrag um eines nach oben.

    Ich habe ja die ID des Eintrags, und somit auch die SortID (=alte Position) aber wie komme ich jetzt zu der neuen Position.
    Kann ich doch damit es in Reihenfolge bleibt folgendes annehmen: (neue Position) = (alte Position)-1
    Dann werden zwar die Löcher immer ein wenig verschoben, aber es bleibt doch in Reihenfolge.

    Woher weiß ich jetzt jedoch welcher Eintrag, der mit der nächst kleineren SortID ist?
    Kann ich irgendwie den Datensatz mit einer SQL Funktion abfragen?

    Dann habe ich zwei IDs, ich vertausche die SortIDs und fertig

    Leider ist mir dein Query auch nicht so wirklich klar.

    lg und danke für eventuelle Infos
    Darian
    Geändert von Darian (11.02.09 um 11:06 Uhr)
     

  7. #7
    kuddeldaddeldu kuddeldaddeldu ist offline Mitglied Diamant
    Registriert seit
    Dec 2007
    Ort
    Bremen
    Beiträge
    3.418
    Hi,

    Zitat Zitat von Darian Beitrag anzeigen
    Woher weiß ich jetzt jedoch welcher Eintrag, der mit der nächst kleineren SortID ist?
    Kann ich irgendwie den Datensatz mit einer SQL Funktion abfragen?
    Anders ausgedrückt, brauchst Du einen Datensatz, dessen SortID kleiner ist, als die momentane, und davon den mit der höchsten. In SQL:

    Code :
    1
    2
    3
    
    SELECT id FROM tabelle 
       WHERE SortID < aktuelle_SortID 
       ORDER BY SortID DESC LIMIT 1

    Zitat Zitat von Darian Beitrag anzeigen
    Dann habe ich zwei IDs, ich vertausche die SortIDs und fertig
    Wenn der Eintrag immer nur um eine Position verrutschen soll, ja.

    Zitat Zitat von Darian Beitrag anzeigen
    Leider ist mir dein Query auch nicht so wirklich klar.
    Damit kannst Du einen Eintrag an eine bestimmte Position rutschen lassen, auch wenn mehrere Einträge dazwischen liegen. Die werden durch die Query neu berechnet.

    LG
    Darian bedankt sich. 
    Da es nötig zu werden scheint: Ich leiste hier keinen Support über PN. Stellt Rückfragen zu Euren Problemen bitte in Eurem Thread, dann können alle helfen.

  8. #8
    Darian Darian ist offline Mitglied Platin
    Registriert seit
    Feb 2003
    Ort
    Guatemala
    Beiträge
    512
    Stimmt, muss ich mir merken, hat wunderbar funktioniert.

    Danke für die Infos.

    lg Darian
     

  9. #9
    hey1234 Tutorials.de Gastzugang
    Also auch wenn ich jetzt wahrscheinlich als ziemlich doof rüberkomme, aber kann mir jemand das script nochmal coden. Bei mir wird das script mit BB-Codes angezeigt!

    PHP-Code:
    UPDATE `TabelleSET `SortID` = `SortID`+1 WHERE `SortIDBETWEEN [font=serif]&#12296;[i]neue Position[/i]〉[/font] AND [font=serif]〈[i]alte Position[/i]〉[/font]-1;
    UPDATE `TabelleSET `SortID` = [font=serif]&#12296;[i]neue Position[/i]〉[/font] WHERE `ID` = [font=serif]〈[i]ID[/i]〉[/font] 
    und

    PHP-Code:
    UPDATE `TabelleSET `SortID` = `SortID`-1 WHERE `SortIDBETWEEN [font=serif]&#12296;[i]alte Position[/i]〉[/font]+1 AND [font=serif]〈[i]neue Position[/i]〉[/font];
    UPDATE `TabelleSET `SortID` = [font=serif]&#12296;[i]neue Position[/i]〉[/font] WHERE `ID` = [font=serif]〈[i]ID[/i]〉[/font] 
     

Ähnliche Themen

  1. Antworten: 4
    Letzter Beitrag: 25.08.10, 19:13
  2. Antworten: 3
    Letzter Beitrag: 04.01.09, 19:14
  3. [Oracle] Datensätze in andere Tabelle "verschieben"
    Von xnicnacx im Forum Relationale Datenbanksysteme
    Antworten: 9
    Letzter Beitrag: 25.09.07, 17:10
  4. String"text" mit der Maus auf Graphic2D verschieben
    Von munuel im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 9
    Letzter Beitrag: 08.02.07, 21:44
  5. Antworten: 3
    Letzter Beitrag: 21.03.05, 13:45