Pagination και Sorting με PHP και MySql

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
nikos-manias
Δημοσιεύσεις: 38
Εγγραφή: 15 Ιαν 2010 10:13

Pagination και Sorting με PHP και MySql

Δημοσίευση από nikos-manias » 26 Μαρ 2010 10:14

Γειά σας όλους.

Έχω φτιάξει μια σελίδα όπου προβάλλω τα περιεχόμενα ενός πίνακα από τη βάση.
Επίσης έχω φτιάξει και το pagiantion.

Επίσης,έχω κάνει και τους τίτλους της καθε στήλης Link το οποίο
οδηγεί στην ίδια σελίδα και ορίζει μεταβλητές στον πίνακα $_GET
που της χρησιμοποιώ για να κάνω ταξινόμηση των αποτελεσμάτων
βάσει του περιεχομένου της κάθε στήλης.
Π.Χ. πατώντας στον τίτλο της στήλης που έχει τα ονόματα πελατών, ταξινομούνται τα αποτελέσματα βάσει των ονομάτων σε αύξουσα ή φθίνουσα σειρά κ.ο.κ.

Το πρόβλημά μου είναι το εξής.

Εάν έχω στο σύνολο πχ. 5 σελίδες και είμαι σε κάποια εκτός από την 1η και την τελευταία, όταν κάνω ταξινόμηση, αυτή εφαρμόζεται σε όλα τα αποτελέσματα του query και όχι μόνο σε αυτά που εμφανίζονται στη σελίδα.

Να διευκρινισω ότι χρησιμοποιώ το όρισμα LIMIT για να περιορίσω τα αποτελέσματα που φέρνει η SELECT. Υποθέτω όμως ότι το LIMIT εφαρμόζεται αφού ανακτηθούν όλα τα αποτελέσματα από τη βάση.

Μπορώ λοιπόν να εφαρμόσω πρώτα το LIMIT και μετά το όρισμα ORDER BY?

Δίνω παρακάτω τη SELECT που χρησιμοποιώ...

Κώδικας: Επιλογή όλων

 SELECT ID,name,email,specialty FROM users WHERE 1 ORDER BY ".$col." ".$mode." LIMIT ".$start.",".$limit."";
όπου το $mode παίρνει τιμές ASC kai DESC.

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

Pagination και Sorting με PHP και MySql

Δημοσίευση από dva_dev » 26 Μαρ 2010 13:49

Το query που θέλεις να κάνεις το pagination θα το έχεις σαν subquery και στο εξωτερικό query θα κάνεις το ordering με το πεδίο που θέλεις.

Π.χ. αν για το pagination χρησιμοποιείς το id και πάνω σε αυτά τα αποτελέσματα (της κάθε σελίδας) θέλεις ταξινόμηση με το Χ πεδίο θα κάνεις

Κώδικας: Επιλογή όλων

$query = "
SELECT * from (
    SELECT ID,name,email,specialty FROM users ORDER BY ID ASC LIMIT $start , $limit
) tmp
ORDER BY $col $mode;
";
Αν το pagination το κάνεις με κάποιο/α άλλο πεδίο αντί του id, θα αλλάξεις το order by μόνο στο εσωτερικό subquery. Αν δεν σε απασχολεί καθόλου και θέλεις τις εγγραφές όπως τις φέρνει το primary key μπορείς να σφάξεις το "ORDER BY ID ASC" εντελώς.

Το "WHERE 1" είναι περιττό.

Αν δεν το έχεις κάνει ήδη, κάνε μια αναζήτηση για sql injections.

nikos-manias
Δημοσιεύσεις: 38
Εγγραφή: 15 Ιαν 2010 10:13

Pagination και Sorting με PHP και MySql

Δημοσίευση από nikos-manias » 26 Μαρ 2010 19:28

Αρχοντας!!!
Ευχαριστώ πολύ dva_dev .
Βεβαια μου ξενίζει λιγο το tmp που ακολουθει την παρενθεση.
Που μπορω να βρω κάποιο tutorial για αυτου του ειδους τη συνταξη;
Γιατι με sql injection mono για θεματα ασφαλεις μου βγαζει..

Παντως μου δουλεψε με τη μια!

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

Pagination και Sorting με PHP και MySql

Δημοσίευση από dva_dev » 26 Μαρ 2010 19:42

Για να χρησιμοποιηθούν τα subqueries πρέπει να έχουν κάποιο όνομα (και στους πίνακες δίνεις όνομα δεν τους αφήνεις αβάπτιστους). Αυτό το όνομα μπαίνει μετά την παρένθεση, όπως μπαίνουν και τα aliases μετά τους πίνακες ή μετά τα πεδία.
Απλώς ένα προσωρινό subquery μου φαίνεται δεν μπορεί να έχει πιο κατάλληλο όνομα από tmp, temp, temporary ή κάτι αντίστοιχο.

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 2 επισκέπτες