Scandal
Διαχειριστής
Ο Πέτρος αυτή τη στιγμή δεν είναι συνδεδεμένος. Είναι 35 ετών, επαγγέλεται Web developer και μας γράφει απο Περιστέρι (Αττική). Έχει γράψει 16,838 μηνύματα.
20-07-12
23:36
Λοιπόν, χρειάζομαι βοήθεια στη σύνταξη ενός query (βασικά δύο αλλά κάπως κοινά). Έχουμε τους ακόλουθους δύο πίνακες. Ο post περιέχει τα δεδομένα των μηνυμάτων ενός forum και ο thumbs περιέχει τα δεδομένα των ψήφων (1 ή -1) που έχουν δώσει οι χρήστες στα μηνύματα. Σας περιγράφω τα structures που μας αφορούν για την επίλυση του προβλήματος (ίσως αναφέρω και περιττά columns):
Πίνακας "post":
postid (auto_increment)
username
userid
dateline
Πίνακας "thumbs":
id (auto_increment)
thumb (= έχει τιμές 1 ή -1)
userid
username
dateline
to_userid
postid
Προσοχή στο ότι ο thumbs έχει συνήθως πάνω από ένα κοινά postids στο αντίστοιχο column, αφού ένα μήνυμα (postid) μπορεί να έχει πάνω από 1 ψήφους (id).
Ο column userid του post και ο to_userid του thumbs έχουν την ίδια πληροφορία αντίστοιχα.
Οι dateline έχουν την σφραγίδα χρόνου που δημιουργήθηκαν τα μηνύματα ή οι ψήφοι αντίστοιχα.
Τι θέλω να κάνω;
Θέλω ένα query που θα επιστρέφει τα top 10 πιο ψηφισμένα posts με θετικές (thumb=1) και ένα query με τα top 10 πιο ψηφισμένα posts με αρνητικές (thumb=-1), τις τελευταίες 7 μέρες. Για κάθε post θα ήθελα να επιστρέφει και τον αριθμό των ψήφων που έχουν γίνει τις 7 αυτές τελευταίες μέρες (προσοχή: όχι το σύνολο των ψήφων του post αλλά το σύνολο των ψήφων σε διάστημα 7 ημερών).
Έχω γράψει το ακόλουθο αλλά δεν νομίζω να κάνει ακριβώς αυτο που ζητάω.
Πίνακας "post":
postid (auto_increment)
username
userid
dateline
Πίνακας "thumbs":
id (auto_increment)
thumb (= έχει τιμές 1 ή -1)
userid
username
dateline
to_userid
postid
Προσοχή στο ότι ο thumbs έχει συνήθως πάνω από ένα κοινά postids στο αντίστοιχο column, αφού ένα μήνυμα (postid) μπορεί να έχει πάνω από 1 ψήφους (id).
Ο column userid του post και ο to_userid του thumbs έχουν την ίδια πληροφορία αντίστοιχα.
Οι dateline έχουν την σφραγίδα χρόνου που δημιουργήθηκαν τα μηνύματα ή οι ψήφοι αντίστοιχα.
Τι θέλω να κάνω;
Θέλω ένα query που θα επιστρέφει τα top 10 πιο ψηφισμένα posts με θετικές (thumb=1) και ένα query με τα top 10 πιο ψηφισμένα posts με αρνητικές (thumb=-1), τις τελευταίες 7 μέρες. Για κάθε post θα ήθελα να επιστρέφει και τον αριθμό των ψήφων που έχουν γίνει τις 7 αυτές τελευταίες μέρες (προσοχή: όχι το σύνολο των ψήφων του post αλλά το σύνολο των ψήφων σε διάστημα 7 ημερών).
Έχω γράψει το ακόλουθο αλλά δεν νομίζω να κάνει ακριβώς αυτο που ζητάω.
Code:
SELECT post.*,
(SELECT COUNT(thumb) FROM thumbs AS thumb_table WHERE thumb_table.postid = post.postid AND thumb_table.thumb=1) AS thumbs_count
FROM post AS post
LEFT JOIN thumbs AS thumbs USING (postid)
WHERE thumbs.dateline > CURDATE() - INTERVAL 1 WEEK
GROUP BY postid
ORDER BY thumbs_count DESC
LIMIT 10
Σημείωση: Το μήνυμα αυτό γράφτηκε 11 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.