2010-11-07 3 views
1

Этот запрос извлекает статьи новостей, помеченные аналогично другим новостным статьям. Возможно ли устранить один из этих подзапросов, который я не вижу?Помогите оптимизировать дополнительный запрос

SELECT id, 
     title, 
     comment_count 
    FROM NEWS 
WHERE (franchise_id = 1 OR franchise_id = 0) 
    AND draft = 0 
    AND id != 459 
    AND id IN (SELECT news_id 
       FROM news_tag_association 
       WHERE tag_id IN (SELECT tag_id 
            FROM news_tag_association 
           WHERE news_id = 459))        
LIMIT 0, 5; 

ответ

2

Да, нет GROUP BY или же, поэтому вы можете использовать обычное Самосоединение:

SELECT 
    id, title, comment_count 
FROM news 
JOIN news_tag_association n2t1 ON (news.id = n2t1.news_id) 
JOIN news_tag_association n2t2 ON (n2t1.tag_id = n2t2.tag_id) 
WHERE franchise_id IN (0, 1) 
    AND draft = 0 
    AND id != 459 
    AND n2t2.news_id = 459 
LIMIT 0,5; 
Смежные вопросы