Πως θα μπορούσα να το υλοποίησω έξυπνα αυτό;;

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

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

Απάντηση
DeveloperGR
Δημοσιεύσεις: 67
Εγγραφή: 08 Νοέμ 2009 22:59

Πως θα μπορούσα να το υλοποίησω έξυπνα αυτό;;

Δημοσίευση από DeveloperGR » 25 Φεβ 2011 23:32

Καλησπέρα,

Έχω ενα πίνακα χρηστών, οπου κάθε χρήστης εχει ενα field [Βαθμολογία], Με τα test data, εχω γεμίσει τον πίνακα αυτον με 100 χρήστες με διαφορετικά scores.

Θέλω λοιπόν, να εμφανίσω σε μια φόρμα(π.χ του προφίλ του) τους 5 χρήστες που βρίσκονται βαθμολογικά πάνω απο τον τρέχων κάθε φορά χρήστη, και τους 5 χρήστες που βρίσκονται βαθμολογικά κάτω απο τον τρέχων κάθε φορά χρήστη.

Υπάρχει κάποιο MySQL Statement που να το κάνει αυτό;; ή η όλη δουλειά θα γίνει καθαρά αλγοριθμικά με PHP( στην προκειμένη περίπτωση ).

Θέλω εναν τρόπο που να εχει κ καλο Performance.

Θα περιμένω τις απαντήσεις σας.

Σας ευχαριστώ.

Άβαταρ μέλους
xultimatex
Honorary Member
Δημοσιεύσεις: 2505
Εγγραφή: 26 Ιούλ 2003 13:02
Τοποθεσία: Ξάνθη
Επικοινωνία:

Πως θα μπορούσα να το υλοποίησω έξυπνα αυτό;;

Δημοσίευση από xultimatex » 26 Φεβ 2011 01:20

Ίσως κάπως έτσι:

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

SELECT * FROM users 
WHERE score > $score 
ORDER BY score ASC
LIMIT 0,4
Όπου $score το score του τρέχοντος χρήστη σταλμένο από την php. Ίσως θα πρέπει να πειράξεις και το ASC / DESC. (αυξουσα/φθίνουσα σειρά)
:arrow: Αν προσπαθείς πολύ για να πετύχεις κάτι, ίσως το κάνεις με λάθος τρόπο...

Άβαταρ μέλους
fafos
Script Master
Δημοσιεύσεις: 6236
Εγγραφή: 30 Νοέμ 2004 03:09

Πως θα μπορούσα να το υλοποίησω έξυπνα αυτό;;

Δημοσίευση από fafos » 26 Φεβ 2011 02:58

Οι πάνες και οι πολιτικοί πρέπει να αλλάζονται συχνά για τον ίδιο λόγο...

DeveloperGR
Δημοσιεύσεις: 67
Εγγραφή: 08 Νοέμ 2009 22:59

Πως θα μπορούσα να το υλοποίησω έξυπνα αυτό;;

Δημοσίευση από DeveloperGR » 26 Φεβ 2011 16:49

Καλησπέρα παίδες,

Σας ευχαριστώ και τους δύο πολυ για τις απαντήσεις.

Λοιπόν αυτο που λέει ο xultimatex έχει το "κενό" οτι δεν διασφαλίζει με κάποιο τρόπο το γεγονός οτι θα επιστραφεί και ο τρέχων χρήστης, για παραδειγμα εαν 10 παίκτες εχουν το ίδιο score, ναι μεν θα μου εμφανίσει αυτους που εχουν μεγαλύτερο score απο τον τρέχων κάθε φορά χρήστη ΑΛΛΑ πιθανών οχι και τον χρήστη(οπου στο προφίλ στην λίστα θα ειναι με κόκκινο χρώμα κάθε φορά η κατάταξη του).


Fafos με UNION πάλι το ίδιο πρόβλημα υπάρχει.

Έχω σκεφτεί και τις 2 απαντήσεις που δώσατε και σας ευχαριστώ πολύ, το θέμα ειναι να λυθούν και τα κενά αυτά που περιέγραψα.

Καμμία ιδέα επιπλέον;;;

Άβαταρ μέλους
Pavel
Honorary Member
Δημοσιεύσεις: 1046
Εγγραφή: 08 Αύγ 2003 00:05
Τοποθεσία: UK

Πως θα μπορούσα να το υλοποίησω έξυπνα αυτό;;

Δημοσίευση από Pavel » 26 Φεβ 2011 17:55

Κάθε παίκτης υπάρχει μόνο μία φορά στον πίνακα ή περισσότερες; Αν είναι περισσότερες και εγώ έχω σκορ 50 και εσύ έχεις σκορ από 51 έως 60, θα σε εμφανίσει 5 φορές από πάνω μου;
Εσύ είσαι τρελός.

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

Πως θα μπορούσα να το υλοποίησω έξυπνα αυτό;;

Δημοσίευση από dva_dev » 26 Φεβ 2011 18:45

Δοκίμασε κάτι τέτοιο αν δεν το έχεις βρει ακόμα:

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

SELECT * FROM (
  &#40;SELECT * FROM users WHERE id <> $userId AND score <= $score ORDER BY score DESC LIMIT 5&#41;
   UNION
  &#40;SELECT * FROM users WHERE id = $userId&#41;
   UNION
  &#40;SELECT * FROM users WHERE id <> $userId AND score >= $score ORDER BY score ASC LIMIT 5&#41;
&#41;tmp ORDER BY score;
Υποθέτω ότι έχεις ένα πεδίο id στον users (primary key).

DeveloperGR
Δημοσιεύσεις: 67
Εγγραφή: 08 Νοέμ 2009 22:59

Πως θα μπορούσα να το υλοποίησω έξυπνα αυτό;;

Δημοσίευση από DeveloperGR » 26 Φεβ 2011 18:47

όχι κάθε παίκτης ειναι unique. Μία φορά δηλ.

Βασικά εχω σκεφτεί την λύση, απλά μάλλον μόνο με ενα query δεν πρέπει να βγαίνει και εφόσον θα εμπλακεί και η PHP, θέλω να δώ εαν υπάρχει πιο βέλτιστη λύση...καμμιά ιδέα ακόμα στο τραπέζι;;

DeveloperGR
Δημοσιεύσεις: 67
Εγγραφή: 08 Νοέμ 2009 22:59

Πως θα μπορούσα να το υλοποίησω έξυπνα αυτό;;

Δημοσίευση από DeveloperGR » 26 Φεβ 2011 18:48

Νομίζω οτι η λύση του dva_dev πρέπει να ειναι η καλύτερη!

Θα το δοκιμάσω και θα σας ενημερώσω πάλι!

Σας ευχαριστώ πολύ όλους! :) :D

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

Πως θα μπορούσα να το υλοποίησω έξυπνα αυτό;;

Δημοσίευση από dva_dev » 26 Φεβ 2011 19:04

Αν δεν έχεις βάλει ήδη, νομίζω πως ένας index πάνω στο score είναι χρήσιμος αν όχι απαραίτητος.

Απάντηση

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

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

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