philos Δημοσ. 13 Σεπτεμβρίου 2016 Δημοσ. 13 Σεπτεμβρίου 2016 Καλημέρες!! Λοιπόν, έχουμε αυτό το php script (vBulletin). Με number of users to process per circle να πηγαίνει για πρώτη φορά στο perpage, τρέχει συνέχεια το script αλλάζοντας σελίδα όταν ολοκληρώνεται ένας κύκλος και υπάρχουν κι άλλοι users να επεξεργαστούμε. Πρόκειται για ένα σύστημα βαθμολόγησης για αγγελίες (αγοραστής - πωλητής) που χρησιμοποιεί τον πίνακα itrader με συντόμως τα columns: rateid userid (ποιος έδωσε τη ψήφο) rateduserid (ποιος έλαβε τη ψήφο) rate (1, 0, -1) κτλ Έχω κολλήσει στην εξής - σημαντική - βελτίωση που θέλω να κάνω: θέλω να processάρω μόνο τους χρήστες που έχουν λάβει ψήφο αλλά κι αυτούς που έχουν δώσει ψήφο. Στη παρούσα φάση το σύστημα τους επεξεργάζεται όλους, γιατί τους ζητάει από τον πίνακα user. Οπότε πρέπει να στραφούμε στον πίνακα itrader (userid + rateduserid). Έγραψα αυτό: SELECT user.userid FROM " . TABLE_PREFIX . "itrader AS itrader LEFT JOIN " . TABLE_PREFIX . "user AS user ON (user.userid = itrader.userid OR user.userid = itrader.rateduserid) WHERE user.userid >= " . $vbulletin->GPC['startat'] . " AND user.userid < $finishat GROUP BY user.userid ORDER BY user.userid Φαίνεται να δουλεύει, αλλά αν βάλω ας πούμε perpage 2 (γενικά έναν πολύ μικρό αριθμό ώστε να χρειάζονται πολλοί κύκλοι για να σταματήσει το script), περνάνε κύκλοι που δεν processάρεται κανένας χρήστης γιατί τα userid/rateduserid δεν είναι συνεχόμενοι αριθμοί αλλά με διασπορά. Καμιά ιδέα;
philos Δημοσ. 13 Σεπτεμβρίου 2016 Μέλος Δημοσ. 13 Σεπτεμβρίου 2016 Καμιά ιδέα; Έχω φάει ώρες ολόκληρες αλλά χωρίς αποτέλεσμα.
mad-proffessor Δημοσ. 13 Σεπτεμβρίου 2016 Δημοσ. 13 Σεπτεμβρίου 2016 Να αλλαξεις το script να επεξεργαζεται rates per cycle.
philos Δημοσ. 13 Σεπτεμβρίου 2016 Μέλος Δημοσ. 13 Σεπτεμβρίου 2016 Το σκέφτηκα κι αυτό, όμως έτσι επεξεργάζεται πολλές φορές τα ίδια userid/rateduserid, αφού ένας χρήστης μπορεί να έχει δώσει ή πάρει πολλά rates (σημ: το ζητούμενο είναι να επεξεργαστούμε τους χρήστες που έχουν δώσει ή πάρει rates). Γι' αυτό σκέφτηκα ότι το LEFT JOIN " . TABLE_PREFIX . "user AS user ON (user.userid = itrader.userid OR user.userid = itrader.rateduserid) + GROUP BY userid είναι μονόδρομος. Τροποποίησα το script και τεστάρω πλέον αυτό. Συγκεκριμένα, παίρνω το τελευταίο προς επεξεργασία userid ($lastuserid μέσα στη while), το περνάω στην startat όταν κάνει το redirect για επόμενο κύκλο και στο query που τραβάει τους χρήστες του νέου κύκλου, κάνω: WHERE user.userid > " . intval($vbulletin->GPC['startat']) . "και LIMIT ". intval($vbulletin->GPC['perpage']) ." Μου φαίνεται λειτουργεί εντάξει, αν παρατηρείτε κάτι ύποπτο - μη λογικό, που μπορεί να προκαλέσει αναξιόπιστα αποτελέσματα, πείτε μου. Ευχαριστώ!
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα