Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Scaning μιας δενδροειδής δομής με recursive SQL scripting. (σε SQL2000 server)

Îåêßíçóå áðü ôï ìÝëïò Fazer. Τελευταία δημοσίευση από το μέλος imanos στις 21-03-2006, 13:13. Υπάρχουν 5 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  21-03-2006, 10:19 10897

    Scaning μιας δενδροειδής δομής με recursive SQL scripting. (σε SQL2000 server)

    Παιδιά εάν εχει καποιος καποιο script sample ευπρόσδεκτο, είτε κάποιο site που να πραγματευεται αλγορίθμους(σε SQL, Store procedure) για scanning μιας δενδροειδής.

    Το ζητημα είναι ότι θα πρεπει να σκαναρω ένα δενδρο για το οποιο δεν ξέρω το βάθος του.

    Ευχαριστώ


    Billy
  •  21-03-2006, 10:47 10898 σε απάντηση της 10897

    Απ: Scaning μιας δενδροειδής δομής με recursive SQL scripting. (σε SQL2000 server)

    Παραθέτω ένα πρόχειρο script που έχω από τα παλιά... Κατά πάσα πιθανότητα δεν θα είναι optimized και οι SQL guru θα έχουν καλύτερες λύσεις να δώσουν, αλλά είναι ότι πιο πρόχειρο έχω Smile [:)]. Αποτελείται από δύο sp, τις οποίες παραθέτω. Να σημειώσω ότι προϋποθέτει την ύπαρξη ενός πίνακα Nodes που έχει ως πεδία το nId (node ID), το nPid (node Parent ID) και το nName. Η κλήση γίνεται προς την getDescendants με το ID του κόμβου του δέντρου από τον οποίο ξεκινάς την αναδρομή, η οποία καλεί τελικά την findChildren. Δεν υπάρχει αναδρομή, αλλά γίνεται επανάληψη με While.

    CREATE PROCEDURE getDescendants(@nStartNodeId intAS
        Create Table #temp ( intID int, nLevel int  )
        Insert Into #temp (intID, nLevel) EXECUTE findChildren @nStartNodeId
        Select nId , nName, nLevel as level  from #temp , Nodes
        Where Nodes.nId = #temp.intID

    CREATE PROCEDURE findChildren(@intID int) AS
        Declare @nLevel int
        Set @nLevel = 1
        Declare @bitContinue bit
        Set @bitContinue = 1
        Create Table #temp ( intID int, nLevel int  )
        Insert Into #temp( intID, nLevel )
        Values (@intID , 0 )
        While @bitContinue = 1
          Begin
            Insert Into #temp (intID , nLevel )
            Select  a.nId , @nLevel
            From Nodes a
            Where Exists ( Select null From #temp b  Where a.npid = b.intID and b.nLevel = @nLevel - 1 )
            If @@RowCount <> 0
                SET @nLevel = @nLevel + 1
            Else
                SET @bitContinue = 0
          End
        Select * from #temp


    Στερνή μου γνώση να σε είχα πρώτα...
  •  21-03-2006, 10:51 10899 σε απάντηση της 10897

    Απ: Scaning μιας δενδροειδής δομής με recursive SQL scripting. (σε SQL2000 server)

    Μπορείς να εξηγήσεις λίγο καλύτερα αυτό που θέλεις να κάνεις.
    Ιωάννης Μανουσάκης
  •  21-03-2006, 10:56 10900 σε απάντηση της 10897

    Απ: Scaning μιας δενδροειδής δομής με recursive SQL scripting. (σε SQL2000 server)

    Ναι, πες λίγα πράγματα παραπάνω, για συγκεκριμένες εφαρμογές ίσως μπορέσουμε να σου δώσουμε καλύτερες λύσεις.
    Χρήστος Γεωργακόπουλος
  •  21-03-2006, 12:13 10902 σε απάντηση της 10897

    Απ: Scaning μιας δενδροειδής δομής με recursive SQL scripting. (σε SQL2000 server)

    Λοιπον εχουμε και λεμε:

    Υπαρχει ένα αρχειο που εμπερειέχει την δενροηδη μορφη Εταιρίας και μετόχων και τα κοματια των μετοχων. (προσοχη ομως μια εταιρια μπορει να εχει μετοχες μιας αλλης κ.ο.κ)

    Θα ηθελα να σκαναρω το δενδρο ωστε να βρω τις αμεσες μετοχες μιας εταιρίας σε μια αλλη αλλα και τις εμεσες. Οπου εμεσες ενοουμε τις μετοχεε που έχει μια εταιρια σε μια αλλη μεσω μιας τριτη εταιρίας, τεταρης,,,,, νιοστης και παει λεγοντας. Το σκαναρισμα του δενδρου λοιπον θα πρεπει να σταματαει οταν ενα κλαδι πληρει καποιες προυποθεσεις τις οποιες γνωρίζουμε.
    Billy
  •  21-03-2006, 13:13 10903 σε απάντηση της 10902

    Απ: Scaning μιας δενδροειδής δομής με recursive SQL scripting. (σε SQL2000 server)

    Συνημμένα: hierarchicalData.sql

    Για να μπορέσω να σου απαντήσω καλύτερα πρέπει να ξέρω ακριβώς την δομή του αρχείου που περιέχει την δενδρική δομή.

    Πάντως σου στέλνω συνημμένα ένα script που αν το επεξεργαστείς κατάλληλα μπορεί να σου λύσει το πρόβλημα αν κατάλαβα καλά το πρόβλημα που έθεσες.

     


    Ιωάννης Μανουσάκης
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems