使用连接限制结果而不计入连接结果?
不知道这是否可能,我正在寻找一个写社交网络的代码,但需要一些帮助。使用连接限制结果而不计入连接结果?
SELECT wall.Wid, wall.uid, wall.wcomment, wall.name, comment.wid, comment.comment,comment.wid
FROM wall
LEFT JOIN comment ON wall.Wid=comment.wid
WHERE wall.uid in (SELECT fid from friends where uid = 3)
干杯家伙
扩大为答案:
它实际上不是容易在SQL做的,特别是没有限制的两壁的文章和评论。你可能会更好地做这个循环,检索x墙贴,然后为每个检索y评论。这样你也可以缓存每篇文章的评论并保存每次检索。
你可以限制只涂鸦墙这样的计数:
SELECT wall.Wid, wall.uid, wall.wcomment, wall.name, comment.wid, comment.comment, comment.wid
FROM wall LEFT JOIN comment ON wall.Wid=comment.wid
WHERE wall.Wid in (SELECT Wid FROM wall WHERE wall.uid IN (SELECT fid from friends where uid = 3) LIMIT 0, 10)
请记住,这是非常低效的,因为对于每个评论,你会被检索的墙后,所以如果一堵墙后有10条评论,您将获得10次墙上贴文数据,每次有不同的评论。我建议你在循环中进行缓存。
我是一个卑鄙的人MSSQL,所以我推断somethign likethis将在MySQL工作...
SELECT
wall.Wid,
wall.uid,
wall.wcomment,
wall.name,
comment.id,
comment.comment,
comment.wid
FROM
wall
LEFT JOIN
comment
ON comment.id IN (SELECT id FROM comment WHERE wid = wall.wid ORDER BY id DESC LIMIT 4)
WHERE
wall.uid IN (SELECT fid from friends where uid = 3)
AND wall.Wid IN (SELECT Wid FROM wall ORDER BY Wid DESC LIMIT 30)
注意:在条件优化MSSQL Server现在是非常好的,就像执行以及加入。我不知道MySQL在这方面的表现。
编辑:
如果你不能使用这种方式的限制,那么你似乎是被迫写一个查询,得到所有的意见,但再加入一些条件,以消除那些你不要。这似乎涉及calulating为每个评论,我只能想以某种方式做的“行号”,这可能不是特别有效......
SELECT
wall.Wid,
wall.uid,
wall.wcomment,
wall.name,
comment.id,
comment.comment,
comment.wid
FROM
wall
LEFT JOIN
comment
ON comment.wid = wall.wid
AND 4 >= (
SELECT
COUNT(*)
FROM
comment AS [newer_comment]
WHERE
[newer_comment].wid = comment.wid
AND [newer_comment].date_added > comment.date_added
)
WHERE
wall.uid IN (SELECT fid from friends where uid = 3)
AND 30 >= (
SELECT
COUNT(*)
FROM
wall AS [newer_wall]
WHERE
[newer_wall].uid IN (SELECT fid from friends where uid = 3)
AND [newer_wall].date_added > wall.date_added
)
注:我添加了一个[date_added]字段添加到[wall]和[comment]表格中,用于确定您选择“前30条”记录的顺序...
为了实现这种效率,必须添加索引以尽可能快地创建COUNT(*)子查询。
有一个最终的(更复杂的,但可能更智能和高效的版本,我今天晚些时候可以申请,但我现在必须重新开始工作,如果这对你有用,我会发布'更好'的版本)
不存在:(mysql不允许内部限制 – Matt 2010-05-25 08:58:03
这里有什么问题? :) – oedo 2010-05-25 07:13:54
嘿队友 - 我想选择让我说我的墙30结果,但然后拉所有他们的所有意见,但是,如果我只是使用限制,它将所有评论作为墙帖(内部加入评论) – Matt 2010-05-25 07:18:12
做你的意思是评论意见? – 2010-05-25 07:25:38