【发布时间】:2012-02-10 11:40:48
【问题描述】:
我需要构建一个 MySQL 查询,我想先尝试使用 django ORM,然后将 raw 作为最后的手段。
我找到了关于两个表之间的单个 JOIN 或 JOIN 的文档,但是没有示例,或者至少是对三个表之间的 JOIN 的简单(初学者)解释
models.py 的内容是
from django.db import models
# Create your models here.
class Threads(models.Model):
name = models.CharField(max_length=100)
author = models.CharField(max_length=100)
date = models.DateTimeField("date published")
slug = models.SlugField()
def __unicode__(self):
return self.name
class Posts(models.Model):
name = models.CharField(max_length=100)
text = models.TextField()
author = models.CharField(max_length=100)
date = models.DateTimeField("date published")
slug = models.SlugField()
def __unicode__(self):
return self.name
class Relations(models.Model):
thread = models.ForeignKey(Threads, related_name = "%(app_label)s_%(class)s_related")
post = models.ForeignKey(Posts, related_name = "%(app_label)s_%(class)s_related")
这是我正在尝试构建的原始 SQL 查询
SELECT forum_threads.id AS t_id, forum_threads.name AS t_name, forum_threads.slug AS t_slug, forum_posts.*
FROM forum_threads
LEFT JOIN forum_relations ON forum_threads.id=forum_relations.thread_id
LEFT JOIN forum_posts ON forum_relations.post_id=forum_posts.id
WHERE forum_threads.slug="<slug_name>"
GROUP BY forum_threads.id
“论坛”是我的应用名称
现在我不知道我是否需要调整/更改我的模型,以及是否需要如何调整。请注意,我不能更改任何重要数据的模型。
编辑
感谢您的所有回答!
好吧,我玩了一些不同的例子,直到我设法产生了一些东西。我是这样理解的:
thread = Threads.objects.filter(slug = slug)
posts = Posts.objects.filter(forum_relations_related__thread = thread[0].id)
第一个查询是从 slug 中检索线程 id,第二个查询返回与该线程 id 上的线程相关的所有帖子。
我将尝试使用 M2M 部分,因为我至少有一个工作示例。
【问题讨论】: