Pagina 7 di 22 primaprima ... 5 6 7 8 9 17 ... ultimoultimo
Visualizzazione dei risultati da 61 a 70 su 217
  1. #61
    Moderatore di Server Apache L'avatar di marketto
    Registrato dal
    Sep 2001
    Messaggi
    5,858
    ciao, ho un'altra curiosità circa la possibilità di visualizzare un singolo sottoramo

    l'importanza dell'ORDER BY sx ASC in questa query è chiara:
    codice:
    $sql = "SELECT id, nome, sx, dx FROM personale WHERE sx >= {$line['sx']} AND dx <= {$line['dx']} ORDER BY sx ASC";
    ora però i dati vengono visualizzati secondo l'ordine di inserimento, e non è possibile ottenere un ordinamento diverso, se non agendo tramite php sull'array dei risultati ciclati (se questi vengono inseriti dentro un'array anzichè essere visualizzati direttamente come output)...risulta anche a voi questa cosa??

    una possibile soluzione è quella di riordinare periodicamente la tabella per ottenere un'ordinamento alfabetico(per esempio).


    think simple think ringo

  2. #62
    sto' andando via di cranio


    sono riuscito a muovere ramo e sottorami da destra sinistra con successo ... ma solo sullo stesso livello


    aiuto , esistono esempi spiegati di MOVENODE ??? ... no perche' ci sto' perdendo la pazienza, non trovo relazioni tra gli spostamenti se sono fuori dallo stesso livello ... per stesso livello intendo anche gerarchie di pippo dove pippo e' nello stesso ramo di pluto ... ecco, se sposto pippo sotto pluto tutto ok, intermedi, esterni, precedenti che siano, altrimenti e' un casino !


    aiuto
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  3. #63
    ok, non dico che dovete postarmi un' unica query che fa tutto


    almeno consigliatemi su come operare ...

    cosa e quanto bisogna considerare i livelli ?
    il fato di spostarsi da destra a sinistra o viceversa puo' essere un problema risolvibile con operazioni assolute ?
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  4. #64
    Utente di HTML.it L'avatar di M4rko
    Registrato dal
    Dec 2000
    Messaggi
    619
    [supersaibal]Originariamente inviato da andr3a
    ok, non dico che dovete postarmi un' unica query che fa tutto [/supersaibal]
    Se può consolarti sul libro di Celko la procedura MoveTree occupa tre pagine (solo la parte di SQL) ed utilizza due tabelle di supporto (una tab. temporanea mentre l'altra in realtà è una view).
    Quindi mi viene da pensare che in effetti non sia una procedura cosi semplice ed immediata.

    almeno consigliatemi su come operare ...

    cosa e quanto bisogna considerare i livelli ?
    il fato di spostarsi da destra a sinistra o viceversa puo' essere un problema risolvibile con operazioni assolute ?
    Allora, partendo dalle cose semplici:
    se il nodo da spostare è una foglia ( sx = dx-1 ) in realtà di basta fare una cosa bovina, ossia getNode, poi un delNode ed un addNode basandoti sul getNode iniziale.

    Se il nodo invece è la radice di un sottoalbero, ci sono due possibilità:
    a) spostando il nodo ti porti dietro anche il sottoalbero;
    b) sposti solo il nodo, "promuovendo" di un livello il suo sottoalbero.
    La possibilità più utile penso sia la prima, senza contare il fatto che dovrebbe essere anche la più semplice tra le due (se si può parlare di semplicità a questo punto)

    Comunque per farla breve, l'unica cosa funzionante (in PHP) che ho visto in giro è questa classe:
    http://www.phpclasses.org/browse/file/5191.html
    e come vedi anche qui il metodo movenode è il più intricato
    Tutti hanno bisogno di credere in qualcosa.
    Io credo che mi farò un'altra birra.


  5. #65
    [supersaibal]Originariamente inviato da M4rko
    Comunque per farla breve, l'unica cosa funzionante (in PHP) che ho visto in giro è questa classe:
    http://www.phpclasses.org/browse/file/5191.html
    e come vedi anche qui il metodo movenode è il più intricato [/supersaibal]
    ma no crazio, questo fa 30 query per un delete e un add ... uhm, non e' il tipo giusto da cui prendere spunto

    grazie comunque, ho capito che mi tocca fare piu' operazioni, il fatto di aver spostato sullo stesso livello un ramo con altri sottorami con successo mi aveva forse forviato dal fatto che di fatto bisogna fare piu' operazioni e considerare varie cose ... che se lo vedi "disegnato" dici "che caxxata", basta considerare quello e quell' altro, poi provi a farlo su DB e bestemmi




    sono bene accetti altri suggerimenti
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  6. #66
    questo e' un mio tentativo solo per il moveNode da SINISTRA a DESTRA ... ovvero quello con sx < di sx dove spostare ...



    // DA SINISTRA VERSO DESTRA
    if( (int)$tosx > (int)$fromsx ) {
    if( (int)$blocks > 1 ) {
    $sql = "BEGIN;
    CREATE TEMPORARY TABLE moved__{$this->__tree} ( id INTEGER UNSIGNED PRIMARY KEY, oldid INTEGER UNSIGNED, sx INTEGER UNSIGNED, dx INTEGER UNSIGNED );
    CREATE TEMPORARY TABLE target__{$this->__tree} ( id INTEGER UNSIGNED PRIMARY KEY, oldid INTEGER UNSIGNED, sx INTEGER UNSIGNED, dx INTEGER UNSIGNED );
    INSERT INTO moved__{$this->__tree} SELECT NULL, id, sx, dx FROM {$this->__tree} WHERE sx >= {$fromsx} AND dx <= {$fromdx};
    INSERT INTO target__{$this->__tree} SELECT NULL, id, sx, dx FROM {$this->__tree} WHERE sx >= {$tosx} AND dx <= {$todx};
    DELETE FROM {$this->__tree} WHERE sx >= {$fromsx} AND dx <= {$fromdx};
    DELETE FROM {$this->__tree} WHERE sx > {$tosx} AND dx < {$todx};
    UPDATE {$this->__tree} SET dx = ( ".( $fromdx - 1 )." ) WHERE sx = ".( $fromsx - 1 )." AND ( SELECT COUNT(id) FROM moved__{$this->__tree} ) = 1;
    UPDATE {$this->__tree} SET sx = ( sx + {$changes} ) WHERE sx > {$todx};
    UPDATE {$this->__tree} SET dx = ( dx - {$changes} ) WHERE sx >= {$fromdx} AND dx < {$tosx};
    UPDATE {$this->__tree} SET sx = ( sx - {$changes} ) WHERE sx >= {$fromdx};
    UPDATE target__{$this->__tree} SET sx = ( sx - {$changes} ), dx = ( dx - {$changes} );
    UPDATE moved__{$this->__tree} SET sx = ( id + ( SELECT MAX(sx) FROM target__{$this->__tree} ) ), dx = ( ( SELECT dx FROM {$this->__tree} WHERE id = ( SELECT oldid FROM target__{$this->__tree} WHERE id = 1 ) ) - id );
    INSERT INTO {$this->__tree} ( id, sx, dx ) SELECT oldid, sx, dx FROM target__{$this->__tree} WHERE id > 1;
    INSERT INTO {$this->__tree} ( id, sx, dx ) SELECT oldid, sx, dx FROM moved__{$this->__tree};
    DROP TABLE moved__{$this->__tree};
    DROP TABLE target__{$this->__tree};
    COMMIT;";
    $this->__queryRollBackable( $sql );
    }
    else {
    $this->__skeep = true;
    $this->delNode( $id_from );
    $this->__skeep = true;
    $this->addNode( $id_to, $id_from );
    }
    }




    pero' sembra funzionare ... a presto tento di creare anche il procedimento da destra a sinistra ... porca trota sto' move che casino


    ovviamente anche questo non e' flessibile al punto di riprodurre un ramo su un suo stesso sottoramo ... se si fanno porcherie fa un ROLLBACK e tanti saluti
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  7. #67
    [supersaibal]Originariamente inviato da andr3a

    pero' sembra funzionare ...
    [/supersaibal]

    scherzavo !!!







    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  8. #68
    nuovi sviluppi ... SCONCERTANTI


    appena arrivo a 32 o piu' di 32 indici, quindi 16 rami per intenderci, anche se faccio la stessa operazione di prima, dove prima, con 14 rami, andava perfetta, sqlite sembra fare dei casini con le query, si autoelimina degli index e nidifica come cacchio gli pare sbagliando la prima somma di aggiornamento nell' altra tabella ...


    io penso sia un errore di quello che faccio, anzi, ne sono praticamente scuro, pero' non capisco perche' entro i 16 rami va tutto perfetto
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  9. #69
    Moderatore di Server Apache L'avatar di marketto
    Registrato dal
    Sep 2001
    Messaggi
    5,858
    è possibile passare dal "Modified Preorder Tree Traversal" al "Adjacency List Model"?

    ovvero, una volta creata la struttura tramite il Modified Preorder Tree Traversal poter visualizzare la stessa struttura secondo lo schema dell'Adjacency List Model, cioè questa?


    ----------------------------------
    stringi stringi lo scopo finale è quello di ottenere da questo:
    codice:
    1 | 1
    2 | 1
    3 | 2
    4 | 2
    5 | 3
    6 | 3
    7 | 1
    8 | 2
    9 | 2
    uan cosa come questa:
    codice:
    1 | 0
    2 | 0
    3 | 2
    4 | 2
    5 | 4
    6 | 4
    7 | 0
    8 | 7
    9 | 7

    think simple think ringo

  10. #70
    Utente di HTML.it L'avatar di M4rko
    Registrato dal
    Dec 2000
    Messaggi
    619
    Non è per niente chiaro quello che ti serve

    Una volta scelta la struttura, ti muovi sempre con quella.
    Per passare da un algoritmo all'altro, devi ricostruire la tabella.
    In questa pagina:
    http://www.sitepoint.com/article/hie...ata-database/3
    trovi uno script che dovrebbe fare l'opposto di quello che chiedi (dall'adjacency list al modified preorder), magari si riesce a combinare qualcosa
    Tutti hanno bisogno di credere in qualcosa.
    Io credo che mi farò un'altra birra.


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.