Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18
  1. #1
    Utente bannato
    Registrato dal
    Jun 2003
    Messaggi
    3,657

    spostamento di recordo su e giu

    ciao a tutti...
    sto facendo uno script ke, tra le tante cose, permette di sistemare l'ordine dei record all'utente mediante dei tasti ke permettono di fare il su e il giu. Il concetto c'è l'ho:

    [ALGORITMO]
    ID = identinficativo del record da spostare su o giu

    SE spostamento è su ALLORA prendi il record con id=ID e il suo precendete e inverti gli id
    altrimenti prendi il recordi con id=ID e il suo successivo e inverti gli id

    [/ALGORITMO]

    come faccio ora a prendere un record + il suo successivo o precedente? Potrei optare per fare ID+1 o ID-1, ma non necessariamente gli id siano sequenziali, poiché i recordo possono essere cancellati. suggerimenti?

  2. #2

  3. #3
    Originariamente inviato da nicola75ss
    un javascript tipo questo?

    http://friedcellcollective.net/js/So.../examples.html
    resta il problema sul database ...



    quanti dati devi gestire ?

    decine, centinaia, migliaia ?

    lavori in MPTTA o in ricorsione (o altro) ?

    quali sono le relazioni ?
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  4. #4
    Utente di HTML.it L'avatar di Nosfe
    Registrato dal
    Jan 2004
    Messaggi
    454
    Penso che lui lo voglia fare nel DB.

    Ora come ora mi viene in mente solo una cosa. Puoi prendere 2 righe partendo da quella che devi modificare con LIMIT 2, poi se deve muoverlo su o giù fai ORDER BY ASC o DESC. Fatto ciò prendi i due ID e fai l'UPDATE dell'id1 mettendo l'id2, e viceversa. L'unica cosa che potrebbe darti problemi è che se è settato come unica non ti fa mettere l'id uguale. Magari qualcuno ha di meglio da suggerirti cmq

  5. #5
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Perdona l'ignoranza andrè. Ho fatto una ricerca su google, ho trovato la tua classe (che sicuramente proverò ) ma niente riguardo sto MPTTA.
    Avresti qualche link oppure in poche parole mi spiegheresti in cosa consiste?

  6. #6
    il fatto è che spostare equivale a perdere le relazioni.

    Se gli id di tabella 1 sono correlati con tabella 2 per, appunto, gli id, spostare un record significherebbe ritrovarsi assegnati in tabella 2 gli id dell'altro che ne ha preso il posto.

    Quando si prevede lo spostamento bisogna prevedere la modifica di tutte le relazioni.

    Una soluzione molto sporca potrebbe essere sapendo l'id, che se va diminuito di 1 ...


    SELECT MAX(id) FROM tabella WHERE id < $idDaSpostare

    mentre se se lo spostamento è su ...

    SELECT MIN(id) FROM tabella WHERE id > $idDaSpostare

    a quel punto col $risultato si può spostare temporaneamente il record da sostituire, aggiornare l'id del modificato, aggiornare lo spostato con l'id del modificato

    inentrambi i casi va gestito il risultato nullo, possibilissimo se il record è il primo della serie o l'ultimo, e li si deve anche poter spostare tutto per id (si lavora di array) oppure si nega la possibilità ...

    è una soluzione orribile (anche perchè manca la parte degli aggiornamenti delle relazioni in tabella 2) ma la prima fast & dirty che mi viene in mente
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  7. #7
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Quanto sono ignorante.
    Ti ringrazio per la disponibilità, buona notte.

  8. #8
    Utente bannato
    Registrato dal
    Jun 2003
    Messaggi
    3,657
    @nicola75ss: credo ke tu abbia sbagliato sezione

    @andrea: nessuna relazione, altrimenti avrei usato un altro campo kiamato peso o qualcosa del genere. Ma quelle query ke tu hai fatto sn errate e ti spiego xké. Supponiamo di avere questa successione

    1 - 5 - 4 - 10 - 15 - 16 - 20 - 2

    io voglio far salire 10 (ovviamente è inteso ke ogni spostamento è di un solo posto x volta)

    quindi io avrei a termine dell'elaborazione questo risultato

    1 - 5 - 10 - 4 - 15 - 16 - 20 - 2

    cn la tua soluzione, invece, io avrei questo

    1 - 10 - 4 - 5 - 15 - 16 - 20 - 2

    perché il massimo degli elementi prima di 10 è 5...

    Ma, combinando la tua di soluzione con l'idea di Nosfe (a cui io avevo pensato,ma nn riuscito a trovare un nesso) si può fare così

    X trovare il record precedente, basta fare

    SELECT *
    FROM `tabella`
    WHERE `id` <$id
    ORDER BY id DESC
    LIMIT 1

    x trovare quello successivo, invece

    SELECT *
    FROM `tabella`
    WHERE `id` >$id
    LIMIT 1

    grazie a tutti cmq

    ma la sigra MPTTA ke vuol dire? voglio saperne di + prima di cercare su google

  9. #9
    non potendo testare e non avendo idea delle relazioni l'ho sparata un pò a caso ... il punto è che io avrei usato, per il solo ordine, un campo a parte.


    l'id è una cosa, l'ordine all'interno della lista di quegli id è un'altra e con un campo ordine non esiste il problema dei mancanti, lo sincronizzi per ogni operazione

    codice:
    id	ordine
    1	3
    10	1
    27	2
    ordine è un campo che va da 1 a max numero di elementi (in questo caso 3) e definisce la posizionedegli stessi senza mutare le relazioni


    l' MPTTA è il Modified Preorder Tree Trasversal Algorithm ma credo sia fuori contesto per questo 3D
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  10. #10
    ho capito poco in questo thread.

    si deve visualizzare in un certo modo la tabella? oppure spostare il solo id da un record all'altro?

    se si deve visualizzare a piacere dell'utente allora il js, se si deve ordinare la tabella "spostando" il valore id da un record all'altro il discorso e' un pochino diverso (e inutile), per definizione i record in una tabella sono locati fisicamente randomize.

    Ma prima di tutto bisognerebbe conoscere il perche' della manovra. A volte le soluzioni possono essere piu' di una.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.