Φωτογραφία Χρήστος ΝΑΣΤΟΠΟΥΛΟΣ
Εμφάνιση αποτελεσμάτων ενός query ανά σελίδα
από Χρήστος ΝΑΣΤΟΠΟΥΛΟΣ - Thursday, 12 February 2009, 12:10 AM
 
Πολλές φορές ο αριθμός εγγραφών που επιστρέφεται ως αποτέλεσμα της αναζήτησης που εκτελεί κάποιος χρήστης, είναι αρκετά μεγάλος για να χωρέσει στην οθόνη του browser, με συνέπεια να πρέπει να εμφανίζουμε τα αποτελέσματα ανά σελίδα.

Για παράδειγμα, αν ζητήσουμε τα επίθετα που ξεκινούν με το γράμμα "Π", στη δεύτερη άσκησης της εργασίας, το αποτέλεσμα θα μπορούσε να περιλαμβάνει δεκάδες εγγραφές σε έναν πίνακα με μεγάλο όγκο δεδομένων.

Για να αντιμετωπίσω αυτό το πρόβλημα, σκέφτηκα δύο τρόπους, αλλά στην άσκηση υλοποίησα τον πρώτο (τον δεύτερο τον σκέφτηκα αφού την είχα υποβάλει...)

Ο πρώτος είναι συνοπτικά ο εξής:
Κάθε φορά που ο χρήστης ζητά μια επόμενη σελίδα φορτώνω το ίδιο script, στο οποίο εκτελώ μια εντολή SELECT χρησιμοποιώντας την επιλογή LIMIT με ορίσματα ανάλογα της σελίδας που ζητάω, για να μου φέρει κάθε φορά τα σωστά αποτελέσματα. Χρησιμοποίησα session μεταβλητές για να κρατώ τις παραμέτρους αναζήτησης που εισήγαγε ο χρήστης στη φόρμα αναζήτησης και να τις περνάω σε κάθε νέα κλήση του script.

Η παραπάνω υλοποίηση, έχει το μειονέκτημα ότι για κάθε νέα σελίδα εκτελείται το ερώτημα προς τη βάση δεδομένων, πράγμα που μπορεί να μην είναι και τόσο αποδοτικό. Για να αποφευχθεί αυτό, θα μπορούσε να εκτελεστεί ένα ερώτημα στη βάση το οποίο να φέρει όλα τα αποτελέσματα και στη συνέχεια με χρήση της συνάρτησης
mysqli_fetch_array(), να μεταφερθούν σε έναν πίνακα ο οποίος θα αποθηκευτεί στο session. Σε κάθε νέα σελίδα που ζητά ο χρήστης θα διατρέχονται και θα εμφανίζονται οι κατάλληλες εγγραφές από τον πίνακα.

Υποθέτω ότι η δεύτερη υλοποίηση είναι πιο αποδοτική.

Ποιες άλλες ιδέες υπάρχουν πάνω στο θέμα;
 
Φωτογραφία Στέλιος Μερσινάς
Απάντηση: Εμφάνιση αποτελεσμάτων ενός query ανά σελίδα
από Στέλιος Μερσινάς - Thursday, 12 February 2009, 6:51 AM
 
Η τεχνική με το LIMIT είναι αυτή που χρησιμοποιούμε συνήθως. Τα sessions δεν προορίζονται για αποθήκευση μεγάλου όγκου δεδομένων.