Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Χρησιμοποιώ PHP και MySQL για να χωρίσω τις εγγραφές που προβάλλονται σε σελίδες.

Για να εξάγω τα στοιχεία κάθε σελίδας χρησιμοποιώ αυτή τη LIMIT στο MySQL query:

LIMIT $startat, $perpage

... Το perpage είναι ό,τι η λέει η λέξη. Το startat είναι:

$startat = ($page - 1) * $perpage;

Έστω λοιπόν ότι ο database table έχει σε auto increment τη στήλη id.

Έστω ότι θέλω να εντοπίσω σε ποια σελίδα ($page) βρίσκεται το id = 999.

Πως μπορώ να το υπολογίσω;

Ουσιαστικά έχοντας το id θέλω να βρω με αποδοτικό τρόπο (κι όχι να πάρω όλες τις εγγραφές και να τις επεξεργαστώ σε php loop), σε ποια σελίδα θα πρέπει να εμφανίζεται το τάδε id (πχ 999).

Αν μπορώ να το κάνω με ελάχιστα extra queries και απλό php κώδικα θα είναι πολύ βολικό!

Δημοσ. (επεξεργασμένο)

Όχι δεν εννοώ αυτό. :)

Ας πούμε ότι το σύστημα σπάει τις σελίδες μέσω του 

LIMIT $startat, $perpage

και δείχνει τα εξής στοιχεία Α1 εως Α9, με $perpage = 3:

ΣΕΛΙΔΑ 1

Α1,Α2,Α3

-- αλλάζω σελίδα --> ΣΕΛΙΔΑ 2

Α4,Α5,Α6

-- αλλάζω σελίδα --> ΣΕΛΙΔΑ 3

Α7,Α8,Α9

 

Κάθε σελίδα έχει τραβήξει τα στοιχεία μέσω του MySQL query με το παραπάνω LIMIT.

 

Πως μπορώ αν υπολογίσω, για παράδειγμα, εκ των προτέρων σε ποια σελίδα βρίσκεται το στοιχείο Α5; Θέτω ως παράδειγμα ότι το A5 έχει ως id = 999.

Στη προκειμένη θέλω να βρω τον αριθμό 2.

Το startat πάντως υπολογίζεται έτσι:

$startat = ($page - 1) * $perpage;

 

 

Επεξ/σία από philos
Δημοσ. (επεξεργασμένο)

Για δοκίμασε:

SELECT
    t.id,
    t.some_column,
    t.some_other_column,
    (SELECT COUNT(*)+1 FROM table_name WHERE id < t.id) as row_number
FROM table_name t
WHERE t.id = 999

Παίρνεις το row_number και παίζεις μετά.
Δεν ξέρω πόσο αποδοτικό είναι αυτό. Το δοκίμασα σε table με 90Κ+ rows, γρήγορο μου φάνηκε εμένα (απάντηση στα 58ms στον υπολογιστή μου, χρόνος βέβαια 2πλάσιος από το ίδιο query χωρίς την κολπατζίδικη γραμμή)

Επεξ/σία από SeaLion
Δημοσ.

Φαίνεται δουλεύει, ευχαριστώ πολύ! :)

Θα το δοκιμάσω και στο production site με τις πολλές εγγραφές κι αν προκύψει κάτι θα σας πω.

Ευχαριστώ!!

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...