Ψάχνω για τον καλύτερο τρόπο για να ανακτήσετε τα επόμενα και προηγούμενα βιβλία του ρεκόρ, χωρίς να τρέχει ένα πλήρες ερώτημα. Έχω ένα πλήρως εφαρμοστεί λύση στη θέση του, και θα ήθελα να μάθω αν υπάρχουν καθόλου καλύτερα προσεγγίσεις για να γίνει αυτό εκεί έξω.
Ας πούμε ότι χτίζουμε μια ιστοσελίδα για ένα φανταστικό μανάβη. Εκτός από τις σελίδες HTML του, κάθε εβδομάδα, θέλει να δημοσιεύσει μια λίστα με τις ειδικές προσφορές στην ιστοσελίδα του. Θέλει αυτές τις προσφορές να διαμένουν σε ένα πραγματικό πίνακα της βάσης δεδομένων, και οι χρήστες πρέπει να είναι σε θέση να ταξινομήσετε τις προσφορές με τρεις τρόπους.
Κάθε στοιχείο πρέπει επίσης να έχει μια σελίδα λεπτομέρεια με περισσότερες, έγγραφες πληροφορίες σχετικά με την προσφορά και την «προηγούμενη» και «επόμενο» κουμπιά. Η «προηγούμενη» και «επόμενο» κουμπιά πρέπει να επισημάνω στις γειτονικές εγγραφές ανάλογα με την ταξινόμηση που ο χρήστης είχε επιλέξει για τη λίστα .
alt κείμενο http://www.pekkagaiser.com/stuff/Sort.gif;
Προφανώς, το κουμπί «επόμενο» για «Ντομάτες, Κατηγορίας Ι» πρέπει να είναι «Μήλα, κατηγορίας 1» και στο πρώτο παράδειγμα, «αχλάδια, κατηγορίας Ι» στο δεύτερο, και κανένας στο τρίτο.
Η εργασία κατά την άποψη λεπτομέρεια είναι να καθορίσει τα επόμενα και προηγούμενα στοιχεία, χωρίς να τρέχει ένα ερώτημα κάθε φορά , με τη σειρά ταξινόμησης της λίστας ως η μόνη διαθέσιμη πληροφορία (Ας πούμε παίρνουμε ότι μέσω μιας παραμέτρου GET ?sort=offeroftheweek_price, και να αγνοήσει τις επιπτώσεις στην ασφάλεια) .
Προφανώς, απλά περνώντας τα αναγνωριστικά των επόμενων και προηγούμενων στοιχείων ως παράμετρος είναι η πρώτη λύση που έρχεται στο μυαλό. Μετά από όλα, γνωρίζουμε ήδη τις ταυτότητες σε αυτό το σημείο. Όμως, αυτό δεν είναι μια επιλογή εδώ - θα μπορούσε να λειτουργήσει σε αυτό το απλουστευμένο παράδειγμα, αλλά όχι σε πολλές από τις πραγματικές περιπτώσεις χρήσης μου.
Τρέχουσα προσέγγισή μου στο CMS μου χρησιμοποιεί κάτι που έχω με το όνομα «διαλογή cache». Όταν ένας κατάλογος έχει φορτωθεί, θα αποθηκεύουν τις θέσεις στοιχείο σε εγγραφών σε έναν πίνακα που ονομάζεται sortingcache.
name (VARCHAR) items (TEXT)
offeroftheweek_unsorted Lettuce; Tomatoes; Apples I; Apples II; Pears
offeroftheweek_price Tomatoes;Pears;Apples I; Apples II; Lettuce
offeroftheweek_class_asc Apples II;Lettuce;Apples;Pears;Tomatoes
Προφανώς, η itemsστήλη είναι πραγματικά γεμάτη με αριθμητικό ταυτότητες.
Στη σελίδα λεπτομερειών, έχω τώρα πρόσβαση στο κατάλληλο sortingcacheαρχείο, φέρω την itemsστήλη, να εκραγεί το, ψάξτε για το τρέχον αναγνωριστικό στοιχείο, και να επιστρέψετε το προηγούμενο και το επόμενο γείτονα.
array(current => Tomatoes,
next => Pears,
previous => null
);
Αυτό είναι προφανώς δαπανηρό, εργάζεται για περιορισμένο αριθμό μόνο αρχεία και δημιουργεί περιττά στοιχεία, αλλά ας υποθέσουμε ότι στον πραγματικό κόσμο, το ερώτημα για να δημιουργήσουν τις λίστες είναι πολύ ακριβό (είναι), τρέχει σε κάθε λεπτομερή προβολή από το ερώτημα, και κάποια προσωρινή αποθήκευση είναι απαραίτητη.
Οι ερωτήσεις μου:
Πιστεύετε ότι αυτή είναι μια καλή πρακτική για να βρείτε τις γειτονικές εγγραφές για την αλλαγή παραγγελίες ερώτημα;
Ξέρετε καλύτερες πρακτικές όσον αφορά τις επιδόσεις και την απλότητα; Ξέρετε κάτι που κάνει αυτό το εντελώς ξεπερασμένο;
Στη θεωρία προγραμματισμού, είναι ένα όνομα για αυτό το πρόβλημα;
Είναι το όνομα «Ταξινόμηση cache» είναι κατάλληλο και κατανοητό για αυτήν την τεχνική;
Υπάρχουν αναγνωρισμένα, κοινά πρότυπα για να λύσει αυτό το πρόβλημα; Πώς ονομάζονται?
Σημείωση: Η ερώτησή μου δεν είναι για την οικοδόμηση του καταλόγου, ή πώς να εμφανίσετε την προβολή λεπτομερειών. Αυτά είναι μόνο παραδείγματα. Η ερώτησή μου είναι η βασική λειτουργία του καθορισμού των γειτόνων του ρεκόρ, όταν μια εκ νέου ερώτημα είναι αδύνατη, και ο γρηγορότερος και οικονομικότερος τρόπος για να φτάσετε εκεί.
Αν κάτι δεν είναι σαφές, παρακαλώ αφήστε ένα σχόλιο και θα αποσαφηνίσει.
Ξεκινώντας μια γενναιοδωρία - ίσως υπάρχει κάποια περισσότερες πληροφορίες για αυτό εκεί έξω.














