Δύσκολο query

10 views
Skip to first unread message

Antonis Christofides

unread,
Feb 5, 2011, 10:24:10 AM2/5/11
to djan...@googlegroups.com
(Τον κώδικα παρακάτω τον γράφω τώρα τάκα-τάκα, δεν είναι ελεγμένος και
μπορεί να έχει λαθάκια που όμως δεν επηρεάζουν αυτό που θέλω να πω.)


from django.db import models

class WikiPage(models.Model):
name = models.SlugField()

class WikiPageVersion(models.Model):
page = models.ForeignKey(WikiPage)
version_number = models.PositiveIntegerField()
content = models.TextField

class Meta:
unique_together = ('page', 'version_number')


Η «τρέχουσα» έκδοση μιας σελίδας είναι αυτή που έχει το μέγιστο
version_number. Θέλω ένα queryset με όλες τις τρέχουσες εκδόσεις
(δηλαδή την τρέχουσα έκδοση για κάθε σελίδα). Δηλαδή:

WikiPageVersion.objects.filter(μόνο ένα αντικείμενο ανά page, αυτό
με το μέγιστο version_number)

Το ερώτημά μου δεν είναι μόνο αν γίνεται θεωρητικά (γιατί με SQL
γίνεται, επομένως και με django θα μπορέσει να γίνει, το πολύ-πολύ να
χρειαστεί κανένα extra), αλλά και αν μπορεί να σταθεί στην πράξη,
γιατί ανησυχώ μήπως κάποια rdbms δεν καταφέρνουν να τρέξουν αρκετά
γρήγορα το query γιατί μπερδεύεται ο optimizer.

Φυσικά βάζοντας ένα ακόμα πεδίο, "current", στο WikiPageVersion, λύνω
το πρόβλημα, αλλά θα είναι reduntant και κοιτάζω μήπως καταφέρω να το
αποφύγω.

gspanos

unread,
Feb 5, 2011, 10:54:55 AM2/5/11
to djan...@googlegroups.com
Δεν είναι πιο απλό στο WikiPage table σου να είναι by default οι
current pages? Και όταν γίνεται obsolete από μια καινούρια version
να βάζεις την, πλέον obsolete, page σε ένα  WikiPageVersionHistory table p.x.?

Το ερώτημα βασικά είναι τι σκοπούς έχεις σχετικά με τα old versions των σελιδών,
αν τα χρειάζεσαι και με ποιον τρόπο.

Επίσης επειδή αυτό είναι ένα κλασσικό versioning problem, να φανταστώ πως
έχεις υπόψη σου την couchdb που σου παρέχει versioning by default? 

2011/2/5 Antonis Christofides <ant...@itia.ntua.gr>

--
Λάβατε αυτό το μήνυμα επειδή έχετε εγγραφεί στην ομάδα django-gr των Ομάδων Google.

Για να αναρτήσετε κάτι σε αυτήν την ομάδα, αποστείλετε μήνυμα ηλεκτρονικού ταχυδρομείου στη διεύθυνση djan...@googlegroups.com.
Για να καταργήσετε την εγγραφή σας από αυτήν την ομάδα, στείλτε ένα μήνυμα ηλεκτρονικού ταχυδρομείου στη διεύθυνση django-gr+...@googlegroups.com.
Για περισσότερες επιλογές, επισκεφθείτε αυτήν την ομάδα στη διεύθυνση http://groups.google.com/group/django-gr?hl=el.


Antonis Christofides

unread,
Feb 7, 2011, 6:28:55 AM2/7/11
to djan...@googlegroups.com
On 2011-02-05 17:24, Antonis Christofides wrote:
> οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½ queryset οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½ (οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½
> οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½).

οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½ οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½οΏ½ SQL:
http://stackoverflow.com/questions/2074514/django-query-that-get-most-recent-objects-from-different-categories/

> οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½ (οΏ½οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½ SQL
> οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½, οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½ οΏ½οΏ½ django οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½οΏ½, οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½-οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½
> οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½ extra), οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½ οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½οΏ½,
> οΏ½οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½ rdbms οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½
> οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½ query οΏ½οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½ οΏ½ optimizer.

οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½, οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½ performance οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½οΏ½ RDBMS-specific:
http://stackoverflow.com/questions/2111384/sql-join-selecting-the-last-records-in-a-one-to-many-relationship

Reply all
Reply to author
Forward
0 new messages