帖子和标签 - 加入限制

时间:2012-01-28 09:14:43

标签: mysql select join limit

我有3个表:帖子标签,* posts_tags *。我想列出帖子以及与之关联的所有标签,但要限制结果。

这就是我现在所做的:

SELECT 
    p.*,
    t.*
FROM 
    (
        SELECT * FROM  posts LIMIT 0, 10
    ) as p
    LEFT JOIN
        posts_tags as pt
        ON pt.post_id = p.post_id
    LEFT JOIN
        tags as t
        ON t.tag_id = pt.tag_id

工作正常,但似乎有点慢......

有更好/更快的方法吗?我可以在其他地方申请LIMIT以获得更好的结果吗?

编辑:我想限制帖子,而不是结果。帖子可以有很多标签。

3 个答案:

答案 0 :(得分:1)

SELECT 
    p.*,
    t.*
FROM 
    posts as p
    LEFT JOIN
        posts_tags as pt
        ON pt.post_id = p.post_id
    LEFT JOIN
        tags as t
        ON t.tag_id = pt.tag_id
LIMIT 0, 10

应该工作;)

修改

MySQL在运行多个连接时速度很慢,在我看来最好将查询分成两个,然后将结果加入到您的应用程序代码中(应用程序开销不应该太大,因为它只有10个结果)。

答案 1 :(得分:1)

尝试使用前面的EXPLAIN关键字运行查询:

EXPLAIN SELECT ...

这将为您提供有关MySQL如何执行查询的信息。也许你错过了某个地方的钥匙或索引。以下是如何读取EXPLAIN的结果: http://dev.mysql.com/doc/refman/5.5/en/explain-output.html

答案 2 :(得分:1)

您是否尝试过将限制子查询移到where子句:

SELECT 
    p.*,
    t.*
FROM 
    posts as p
LEFT JOIN
    posts_tags as pt
    ON pt.post_id = p.post_id
LEFT JOIN
    tags as t
    ON t.tag_id = pt.tag_id
WHERE
    p.post_id in (select post_id from post limit 0,10)