2009-09-11 7 views
1

Est-il possible de trier les résultats renvoyés par SQLObject par une valeur d'une autre table?Tri d'un champ d'une autre table référencée par une clé étrangère dans SQLObject

J'ai deux tables:

class Foo(SQLObject): 
     bar = ForeignKey('Bar') 

    class Bar(SQLObject): 
     name = StringCol() 
     foos = MultipleJoin('Foo') 

Je voudrais obtenir foo s triées par name d'un bar ils sont liés à.

Faire:

foos = Foo.select().orderBy(Foo.q.bar) 

... trierait la sortie par bar 's ids, mais comment puis-je les trier par bar' nom?

+0

Avez-vous essayé foos = Foo.select(). OrderBy (Foo.q.bar.name)? Je suppose que cela trierait la sortie par le nom de la barre. – Mohamed

+0

@Ainab: Oui, ça ne marchera pas. AttributeError: L'instance SQLObjectField n'a pas d'attribut 'name' – Alex

+0

La question serait plus facile à comprendre si vous donniez un exemple réaliste plutôt que foo et bar. –

Répondre

3

Voici la réponse d'un mainteneur de SQLObject (il a du mal lui-même l'affichage parce captcha est pas affiché):

faire une jointure explicite:

foos = Foo.select(Foo.q.barID==Bar.q.id, orderBy=Bar.q.name) 

Cela génère une requête:

SELECT foo.id, foo.bar_id FROM foo, bar WHERE ((foo.bar_id) = (bar.id)) ORDER BY bar.name 

PS. Je suis le mainteneur actuel de SQLObject. Je ne visite pas stackoverflow.com; un de mes amis m'a indiqué la question. Si vous avez d'autres questions sur SQLObject je vous invite à la SQLObject mailing list.