Βοήθεια με σύνταξη query

Συζητήσεις για την βάση δεδομένων MySQL και το phpMyAdmin

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

Απάντηση
Άβαταρ μέλους
philos
Δημοσιεύσεις: 264
Εγγραφή: 30 Αύγ 2007 23:32

Βοήθεια με σύνταξη query

Δημοσίευση από philos » 26 Μάιος 2013 19:02

Χρειάζομαι τη βοήθειά σας σε ένα query ή άλλη πρόταση-λύση γι αυτό που θέλω να κάνω. :D
Λοιπόν, έχουμε τους εξής πίνακες που αφορούν ένα σύστημα groups. Σας παραθέτω μόνο τα columns που θα χρειαστούν για το πρόβλημα:
*user (δεδομένα χρηστών)
- userid
- username

*socialgroup (περιέχει τα στοιχεία των groups)
- groupid
- name

*socialgroupmember (περιέχει ποιοι χρήστες είναι μέλη σε κάθε group)
- userid
- groupid

*discussion (περιέχει τα δεδομένα των συζητήσεων)
- discussionid
- groupid
- firstpostid
- lastpostid
- lastpost (timestamp)
- lastposter
- lastposterid

*groupmessage (περιέχει τα δεδομένα των μηνυμάτων των συζητήσεων)
- gmid
- discussionid
- title
- postuserid
- dateline (timestamp)

*announcement (περιέχει τα δεδομένα των ανακοινώσεων των groups)
- announcementid
- groupid
- title
- dateline (timestamp)

Αυτό που θέλω, είναι ένα query που θα εξάγει τα τελευταία μηνύματα και τις τελευταίες ανακοινώσεις σε σειρά dateline DESC, για τα groups στα οποία ο χρήστης είναι μέλος.
Δηλαδή αν μια ανακοίνωση είναι πιο πρόσφατη από ένα μήνυμα, θα πρέπει να εμφανίζεται πιο ψηλά στα αποτελέσματα και το αντίστροφο.
Προσοχή όμως, υπάρχει μια ιδιαιτερότητα στην εμφάνιση των τελευταίων μηνυμάτων: επιθυμώ για κάθε discussion να εμφανίζεται μόνο ένα στοιχείο στα αποτελέσματα. Δηλαδή αν οι χρήστες κάνουν πχ 5 συνεχόμενα μηνύματα σε μία discussion, δεν θέλω να δω 5 στοιχεία στη λίστα αποτελεσμάτων, αλλά 1 (με τον τίτλο του μηνύματος (groupmessage -> title) και ημερομηνία του τελευταίου μηνύματος.

Το ακόλουθο query επιστρέφει μόνο τα τελευταία μηνύματα, σύμφωνα με τις απαιτήσεις μου:

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

          SELECT discussion.*, user.username, socialgroup.name, groupmessage.dateline, groupmessage.title
          FROM _vbdiscussion AS discussion
          LEFT JOIN _vbgroupmessage AS groupmessage ON(groupmessage.gmid = discussion.lastpostid)
          LEFT JOIN _vbuser AS user ON(user.userid = discussion.lastposterid)
          LEFT JOIN _vbsocialgroup AS socialgroup ON (discussion.groupid = socialgroup.groupid)
          LEFT JOIN _vbsocialgroupmember AS socialgroupmember ON (socialgroupmember.groupid = socialgroup.groupid)
          WHERE socialgroupmember.userid = ". intval($userid) ."
          ORDER BY groupmessage.dateline DESC 
          LIMIT 10  
Τι μπορώ να κάνω για να συμπεριλάβω και τις ανακοινώσεις; Έχω κάνει μερικές προσπάθειες, αλλά με λάθος αποτελέσματα.
Ο τελικός html πίνακας είναι εύκολο να διαμορφωθεί με μερικές if που θα τσεκάρουν αν έχει επιστραφεί announcementid ή gmid.

Δεκτές και προτάσεις για άλλες λύσεις, αν έχετε κατά νου κάτι. Συγγνώμη αλλά είμαι αρχάριος. :oops:

Άβαταρ μέλους
philos
Δημοσιεύσεις: 264
Εγγραφή: 30 Αύγ 2007 23:32

Βοήθεια με σύνταξη query

Δημοσίευση από philos » 28 Μάιος 2013 16:03

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

Απάντηση

Επιστροφή στο “MySQL”

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

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