Βοήθεια στη σύνταξη MySQL ερωτήματος

Scandal

Διαχειριστής

Ο Πέτρος αυτή τη στιγμή δεν είναι συνδεδεμένος. Είναι 34 ετών, επαγγέλεται Web developer και μας γράφει απο Περιστέρι (Αττική). Έχει γράψει 16,689 μηνύματα.
Λοιπόν, χρειάζομαι βοήθεια στη σύνταξη ενός 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 ημερών).

Έχω γράψει το ακόλουθο αλλά δεν νομίζω να κάνει ακριβώς αυτο που ζητάω. :hmm:
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 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

Scandal

Διαχειριστής

Ο Πέτρος αυτή τη στιγμή δεν είναι συνδεδεμένος. Είναι 34 ετών, επαγγέλεται Web developer και μας γράφει απο Περιστέρι (Αττική). Έχει γράψει 16,689 μηνύματα.
Το πρόβλημα λύθηκε! :D
Σας παραθέτω το query:
Code:
SELECT post.*, sum1
FROM post INNER JOIN
(
    SELECT postid, COUNT(thumb) AS sum1
    FROM thumbs
    WHERE (FROM_UNIXTIME(dateline) > CURDATE() - INTERVAL 1 WEEK) AND (thumb = 1)
    GROUP BY postid
    ORDER BY sum1 DESC, postid DESC
    LIMIT 10
) tmp ON post.postid = tmp.postid
ORDER BY sum1 DESC, postid DESC;
Γενικά ταλαιπωρήθηκα μέχρι να ανακαλύψω την FROM_UNIXTIME() (οι dateline έχουν timestamp).
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 11 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

g1wrg0s

Επιφανές μέλος

Ο 01001 αυτή τη στιγμή δεν είναι συνδεδεμένος. Επαγγέλεται Φοιτητής/τρια. Έχει γράψει 9,074 μηνύματα.
καλησπερα παιδια
χρησιμοποιω το phpmyadmin για τη συγγραφη mysql ερωτηματων. Ωστοσο εχω καποιο προβλημα και λεω να ρωτησω.

Κανωντας ενα πινακα Α και βαζοντας τα κλειδια του α1,α2 θελω να αναφερθω σε αυτα μεσω ενος πινακα Β με τα ξενα κλειδια β1,β2. Το προβλημα εναι οτι δε μπορω να κανω τα β1,β2 ξενα κλειδια.

Εχετε καμοια ιδεα ;
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 10 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

g1wrg0s

Επιφανές μέλος

Ο 01001 αυτή τη στιγμή δεν είναι συνδεδεμένος. Επαγγέλεται Φοιτητής/τρια. Έχει γράψει 9,074 μηνύματα.
καποιο tytorial για mysql-phpmyadmin ;
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 10 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

aergos

Δραστήριο μέλος

Ο aergos αυτή τη στιγμή δεν είναι συνδεδεμένος. Έχει γράψει 410 μηνύματα.
καλησπερα παιδια
χρησιμοποιω το phpmyadmin για τη συγγραφη mysql ερωτηματων. Ωστοσο εχω καποιο προβλημα και λεω να ρωτησω.

Κανωντας ενα πινακα Α και βαζοντας τα κλειδια του α1,α2 θελω να αναφερθω σε αυτα μεσω ενος πινακα Β με τα ξενα κλειδια β1,β2. Το προβλημα εναι οτι δε μπορω να κανω τα β1,β2 ξενα κλειδια.

Εχετε καμοια ιδεα ;

ρίχνοντας μία πολύ γρήγορη ματιά στο phpmyadmin δε βρήκα κάποια επιλογή από το γραφικό περιβάλλον ώστε να ορίσω ένα πεδίο ως ξένο κλειδί, αλλά σε κώδικα είναι πολύ απλό:
ALTER TABLE Orders
ADD FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)

https://www.w3schools.com/sql/sql_foreignkey.asp
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 10 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

Χρήστες Βρείτε παρόμοια

  • Τα παρακάτω 0 μέλη και 1 επισκέπτες διαβάζουν μαζί με εσάς αυτό το θέμα:
    Tα παρακάτω 4 μέλη διάβασαν αυτό το θέμα:
  • Φορτώνει...
Top