k33theod Δημοσ. 27 Φεβρουαρίου 2022 Share Δημοσ. 27 Φεβρουαρίου 2022 (επεξεργασμένο) Είναι μια βάση που έχει φωτογραφίες. Οι φωτογραφίες ανήκουν σε πρόσωπα. Οπότε στον πίνακα φωτογραφίες έχω foreign key το person. Θέλω ο χρήστης person να μπορεί να έχει τις foto του sorted. Δηλαδή εάν έχει ας πούμε 10 fotos να λέει αυτή είναι η 1ή αυτή η 2η κλπ. Κάποια στιγμή σβήνει την 2 ασ πούμε τότε το σύνολο αλλάζει σε 9 και η 3 γίνεται 2 η 4η 3 κλπ. Προσθέτει μία ως 5η το σύνολο αυξάνει και η 5η γίνεται 6η klp. Και θέλω αυτά τα νούμερα να είναι στη βάση στον ίδιο πίνακα με τις φωτο. Οπότε σκέφτηκα μήπως γίνεται με sql αλλά μου φαίνεται σχεδόν αδύντατο. Καμία ιδέα; id foto person id foto person priority 1 foto1 1 1 foto1 1 3 2 foto2 2 2 foto2 2 1 3 foto3 3 3 foto3 3 8 4 foto4 1 4 foto4 1 7 5 foto5 2 5 foto5 2 4 6 foto6 3 6 foto6 3 5 7 foto7 1 7 foto7 1 4 8 foto8 2 8 foto8 2 5 9 foto9 3 9 foto9 3 6 10 foto10 1 10 foto10 1 6 11 foto11 2 11 foto11 2 8 12 foto12 3 12 foto12 3 4 13 foto13 1 13 foto13 1 5 14 foto14 2 14 foto14 2 7 15 foto15 3 15 foto15 3 7 16 foto16 1 16 foto16 1 8 17 foto17 2 17 foto17 2 6 18 foto18 3 18 foto18 3 3 19 foto19 1 19 foto19 1 2 20 foto20 2 20 foto20 2 3 21 foto21 3 21 foto21 3 1 22 foto22 1 22 foto22 1 1 23 foto23 2 23 foto23 2 2 24 foto24 3 24 foto24 3 2 Δηλαδή η βάση μου είναι τώρα όπως στο 1ο Πίνακα και θέλω να γίνει όπως στον 2ο. Παράδειγμα με 3 άτομα που έχει 8 φωτογραφίες ο καθένας Επεξ/σία 27 Φεβρουαρίου 2022 από k33theod Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
archer100 Δημοσ. 27 Φεβρουαρίου 2022 Share Δημοσ. 27 Φεβρουαρίου 2022 Χωρις να ειμαι εξπερ στην sql, θα πονταρα οτι ειναι πιο εφικτο να γινει με εξελ? Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
masteripper Δημοσ. 27 Φεβρουαρίου 2022 Share Δημοσ. 27 Φεβρουαρίου 2022 Αν εννοείς ότι θες να αλλάζεις το Priority τότε θα χρειαστείς 1 trigger On Insert (όταν κάνεις εισαγωγή) και 1 trigger on Delete (Οταν διαγράφεις ) Οπότε όταν κάνεις διαγραφή Update Όταν κάνεις εισαγωγή Update. 2 Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
tsofras Δημοσ. 27 Φεβρουαρίου 2022 Share Δημοσ. 27 Φεβρουαρίου 2022 12 λεπτά πριν, masteripper είπε Αν εννοείς ότι θες να αλλάζεις το Priority τότε θα χρειαστείς 1 trigger On Insert (όταν κάνεις εισαγωγή) και 1 trigger on Delete (Οταν διαγράφεις ) Οπότε όταν κάνεις διαγραφή Update Όταν κάνεις εισαγωγή Update. Performance wise δεν ξέρω αν θα είναι σωστό όμως αυτό , δλδ αν έχει 100 / 1000 φωτό θα πρέπει να τις κάνει όλες update Εγώ θα προτιμούσα ένα απλό id autogenerated που θα γίνεται order. Όταν γίνεται delete απλά θα λείπει η εγγραφή και δεν θα χαλάει το ordering. Τώρα το tricky είναι αν θέλεις να βάζει ο χρήστης το ordering , αλλά δεν ξέρω κατα πόσο είναι και αυτό σωστό. Αν έχει δλδ 100 φωτογραφίες και βάλει μία νέα και την θέλει πέμπτη ? Εκεί όντως θα πρέπει να κάνεις όλες τις υπόλοιπες update με +1 Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
masteripper Δημοσ. 27 Φεβρουαρίου 2022 Share Δημοσ. 27 Φεβρουαρίου 2022 1 ώρα πριν, tsofras είπε Performance wise δεν ξέρω αν θα είναι σωστό όμως αυτό , δλδ αν έχει 100 / 1000 φωτό θα πρέπει να τις κάνει όλες update Εγώ θα προτιμούσα ένα απλό id autogenerated που θα γίνεται order. Όταν γίνεται delete απλά θα λείπει η εγγραφή και δεν θα χαλάει το ordering. Τώρα το tricky είναι αν θέλεις να βάζει ο χρήστης το ordering , αλλά δεν ξέρω κατα πόσο είναι και αυτό σωστό. Αν έχει δλδ 100 φωτογραφίες και βάλει μία νέα και την θέλει πέμπτη ? Εκεί όντως θα πρέπει να κάνεις όλες τις υπόλοιπες update με +1 1 δείκτη θα αλλάξει (+/-)...δεν πρόκειται να γίνει και κάτι...μιλάμε για Milliseconds Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
Theo1903 Δημοσ. 27 Φεβρουαρίου 2022 Share Δημοσ. 27 Φεβρουαρίου 2022 Επίσης, δεν ξέρω αν έχεις κάποιον περιορισμό στο backend σου, αλλα γιατί να μην τις κάνει indexing όταν τις τραβάς ? Είτε με βάση το id είτε με ένα πεδίο ημερομηνίας του πότε το πέρασε ο χρήστης. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
k33theod Δημοσ. 28 Φεβρουαρίου 2022 Μέλος Share Δημοσ. 28 Φεβρουαρίου 2022 Αυτό που θέλω είναι ο χρήστης να μπορεί να αλλάζει το order. Δηλαδή ανεβάζω μια φωτογραφία που μου αρέσει και θέλω να έχει priority k. Η διαδικασία του χρήστη είναι upload foto και priority k. Η διαδικασία στη συνέχεια όπως to σκέφτομαι είναι η εξής. // Insert k 1 update fotos where priority> = k make priority+=1//σε όλα ενοείται ότι επιλέγω μόνο για τον ενδιαφερόμενο χρήστη 2 insert foto (new foto prioriti k ). σε πείπτωση delete k 1 remove foto where priority k 2 update fotos where priority > k make priority-=1 σε περιπτωση update foto l se k 1 update foto where priority l set priority -1//endiamesi timi 2 update fotos where priority > l set priority-=1 3 update fotos where priority >= k set priority +=1 4 update fotos where priority = -1 set priority k Απλά σκεφτόμουν αν μπορούσα να το υλοποιήσω - απλοποιήσω, κάνοντας το πεδίο priority, ιδανικά ένα range, που ξεκινάει από 1 και τελειώνει στο πλήθος φωτο που έχει ο χρήστης και να βάλω όλη την παραπάνω διαδικασία στην βάση. Πρόβλημα είναι ότι μέσα στον πίνακα μπορεί να υπάρχουν πολλές εγγραφές με το ίδιο priotity γιατί ανήκουν σε διαφορετικούς χρήστες. Οπότε θα το κάνω στο backend με πιθανότητα να γίνει μ@l@k@ 99,9% 12 ώρες πριν, tsofras είπε Performance wise δεν ξέρω αν θα είναι σωστό όμως αυτό , δλδ αν έχει 100 / 1000 φωτό θα πρέπει να τις κάνει όλες update Εγώ θα προτιμούσα ένα απλό id autogenerated που θα γίνεται order. Όταν γίνεται delete απλά θα λείπει η εγγραφή και δεν θα χαλάει το ordering. Τώρα το tricky είναι αν θέλεις να βάζει ο χρήστης το ordering , αλλά δεν ξέρω κατα πόσο είναι και αυτό σωστό. Αν έχει δλδ 100 φωτογραφίες και βάλει μία νέα και την θέλει πέμπτη ? Εκεί όντως θα πρέπει να κάνεις όλες τις υπόλοιπες update με +1 Ναι δεν με καλύπτει + ότι πως θα βάλω αυτό το id στον πίνακα για κάθε user χωριστά. Οι φωτο για κάθε χρήστη δεν νομίζω να ξεπερνάνε τις 20 περίπου. Οι χρήστες είναι unlimited. 11 ώρες πριν, Theo1903 είπε Επίσης, δεν ξέρω αν έχεις κάποιον περιορισμό στο backend σου, αλλα γιατί να μην τις κάνει indexing όταν τις τραβάς ? Είτε με βάση το id είτε με ένα πεδίο ημερομηνίας του πότε το πέρασε ο χρήστης. Δεν έχω κάποιο περιορισμό. Σε πρώτη φάση που ανεβάζει κάποιος 10 φωτο px μπορώ να πω "ανέβασε τες με τη σειρά που θες". Μετά τι γίνεται με updates deletes new inserts 13 ώρες πριν, archer100 είπε Χωρις να ειμαι εξπερ στην sql, θα πονταρα οτι ειναι πιο εφικτο να γινει με εξελ? Δεν παίζει τέτοια λύση. Η βάση τρέχει ήδη σε mysql Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
Nazar Δημοσ. 28 Φεβρουαρίου 2022 Share Δημοσ. 28 Φεβρουαρίου 2022 13 ώρες πριν, masteripper είπε 1 δείκτη θα αλλάξει (+/-)...δεν πρόκειται να γίνει και κάτι...μιλάμε για Milliseconds O trigger που πρότεινε ο συμφορουμίτης, πολύ καλή λύση. πχ σβήνεται η φωτο νο 5 του person 3, -> update priority=priority-1 για τις φωτο μεγαλύτεες του 5 του person 3 (δηλαδη μαχ 20 updates) Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
Επισκέπτης Δημοσ. 28 Φεβρουαρίου 2022 Share Δημοσ. 28 Φεβρουαρίου 2022 https://learnsql.com/cookbook/how-to-rank-rows-within-a-partition-in-sql/ Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
MastroGiannis Δημοσ. 1 Μαρτίου 2022 Share Δημοσ. 1 Μαρτίου 2022 2 ώρες πριν, morehp είπε https://learnsql.com/cookbook/how-to-rank-rows-within-a-partition-in-sql/ Το θέμα είναι ότι εδώ, την κατάταξη την ορίζει ο χρήστης, με εντελώς δικά του κριτήρια και όχι οι τιμές κάποιας άλλης στήλης. Οι τιμές της στήλης της κατάταξης (της οποίας ο σκοπός θεωρώ ότι περιγράφεται καλύτερα με το όνομα rank και όχι το priority), δεν έχουν και τόσο σημασία, αρκεί να είναι η μία μεγαλύτερη από την άλλη. Συνεπώς, κατά το insert και delete, δεν χρειάζεται και μεγάλη μέριμνα. Μια νέα φωτο μπορεί να πάρει το MAX(rank) +1 και μετά ο χρήστης να την κατατάξει όπου θέλει, ή να πάρει την τιμή 1 και να αυξηθούν οι άλλες κατά 1, αναλόγως την ταξινόμηση. Νομίζω πως περισσότερη δουλειά απαιτείται στο front end ώστε να ανιχνεύεται η κατεύθυνση της επιθυμητής κατάταξης της επιλεγμένης φωτογραφίας και να καλούνται τα SQL updates τα οποία, μάλλον, φτάνει να εκτελούν ένα απλό swap της επιλεγμένης rank με την αμέσως μεγαλύτερη ή αμέσως μικρότερη τιμή της, για κάθε βήμα κατάταξης. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
DrKo Δημοσ. 1 Μαρτίου 2022 Share Δημοσ. 1 Μαρτίου 2022 Αφού σε νοιάζει η σχετική τους σειρά, κράτα μόνο ποια είναι πριν και ποια μετά. Δηλαδή, βάλε στην ένα table που θα κρατάει τρεις στήλες, μία για το ID του item, μία για το ID του item που είναι πριν, και μία για το ID του item που είναι μετά. Όταν εισάγεις νέο ή διαγράφεις ένα item, αλλάζεις μόνο τα δύο items που είναι πριν και μετά. Εφόσον ο χρήστης θα βλέπει τα items τότε θα μπορείς να τα κάνεις query βάσει του ID τους. Δηλαδή: Ο χρήστης θέλει να εισάγει νέο item μετά το item X ή να διαγράψει ένα υφιστάμενο item Y Εάν είναι για εισαγωγή, κάνεις query το item X βάσει του ID του από το table και βλέπεις ποιο item είναι μετά, έστω το item Z. Αλλάζεις το ποιο item είναι μετά στο item X και ποιο item είναι πριν στο item Z Εάν είναι για διαγραφή, βλέπεις ποια items είναι πριν και μετά, και πας και τα «ενώνεις». Τα παραπάνω θέλουν μόνο τρεις αλλαγές στην βάση για εισαγωγή και διαγραφή, συν μία την actual εισαγωγή/διαγραφή. Υ.Γ. Στην ουσία, η κλάση σου για το table με τις συσχετίσεις θα είναι μία double linked list. Οι μέθοδοι της κλάσης θα υλοποιούν τις λειτουργίες της double linked list. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
DrKo Δημοσ. 1 Μαρτίου 2022 Share Δημοσ. 1 Μαρτίου 2022 Στις 28/2/2022 στις 10:14 ΠΜ, k33theod είπε Η διαδικασία στη συνέχεια όπως to σκέφτομαι είναι η εξής. // Insert k 1 update fotos where priority> = k make priority+=1//σε όλα ενοείται ότι επιλέγω μόνο για τον ενδιαφερόμενο χρήστη 2 insert foto (new foto prioriti k ). σε πείπτωση delete k 1 remove foto where priority k 2 update fotos where priority > k make priority-=1 σε περιπτωση update foto l se k 1 update foto where priority l set priority -1//endiamesi timi 2 update fotos where priority > l set priority-=1 3 update fotos where priority >= k set priority +=1 4 update fotos where priority = -1 set priority k Παράθεση για να δεις το από πάνω. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα