Посты и теги - ограничение в соединении - PullRequest
0 голосов
/ 28 января 2012

У меня есть 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 ]

1 голос
/ 28 января 2012

Попробуйте выполнить запрос с ключевым словом EXPLAIN перед ним:

EXPLAIN SELECT ...

Это даст вам представление о том, как MySQL выполняет ваш запрос.Может быть, вы пропустите ключ или индекс где-то.Вот как прочитать результат EXPLAIN: http://dev.mysql.com/doc/refman/5.5/en/explain-output.html

1 голос
/ 28 января 2012

Вы пытались переместить ограничивающий подзапрос в предложение 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)
1 голос
/ 28 января 2012
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).

...