我是一個卑鄙的人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(*)子查詢。
有一個最終的(更復雜的,但可能更智能和高效的版本,我今天晚些時候可以申請,但我現在必須重新開始工作,如果這對你有用,我會發布'更好'的版本)
這裏有什麼問題? :) – oedo 2010-05-25 07:13:54
嘿隊友 - 我想選擇讓我說我的牆30結果,但然後拉所有他們的所有意見,但是,如果我只是使用限制,它將所有評論作爲牆帖(內部加入評論) – Matt 2010-05-25 07:18:12
做你的意思是評論意見? – 2010-05-25 07:25:38