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

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

Δημοσ.

Καλημέρες!!

 

Λοιπόν, έχουμε αυτό το 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 δεν είναι συνεχόμενοι αριθμοί αλλά με διασπορά.

 

Καμιά ιδέα; :-)

Δημοσ.

Το σκέφτηκα κι αυτό, όμως έτσι επεξεργάζεται πολλές φορές τα ίδια 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']) ."
Μου φαίνεται λειτουργεί εντάξει, αν παρατηρείτε κάτι ύποπτο - μη λογικό, που μπορεί να προκαλέσει αναξιόπιστα αποτελέσματα, πείτε μου.

 

Ευχαριστώ! :-)

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

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

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

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

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

Σύνδεση

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

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