2013-09-08 4 views
1

Как я могу присоединиться к этим двум запросам в один, уже присоединившись к ним?Присоединяйтесь к двум запросам в одном

SELECT * 
FROM post 
     LEFT JOIN post_plus 
       ON (post.id = post_plus.news_id) 
     where approve = 1 
ORDER BY fixed DESC, 
      date DESC 
LIMIT 0, 7; 

SELECT c1.postid 
FROM post_category c1 
     JOIN post_category c2 
     ON c1.postid = c2.postid 
WHERE c1.categoryid IN (130, 3, 4, 5) 
     AND c2.categoryid = 73 
+0

Это может быть appropraite для http://codereview.stackexchange.com –

ответ

1

Если пост имеет внешний ключ для связи post_category:

SELECT * 
FROM post p 
JOIN post_category pc 
ON p.fk_post_category = pc.id 
JOIN post_category pc2 
ON pc.postid = pc2.postid 
LEFT JOIN post_plus pp 
      ON (p.id = pp.news_id) 
where approve = 1 
and pc.categoryid IN (130, 3, 4, 5) 
    AND pc2.categoryid = 73 
ORDER BY fixed DESC, 
     date DESC 
LIMIT 0, 7; 

Очевидно, ваш результат ограничен в качестве первого запроса. Если не существует отношения между почтовой и почтовой категорией, напишите, как вы хотите поместить эти таблицы.

-1

Вы можете просто присоединиться к этим запросам, используя union, если оба запроса аналогичны столбцам с похожим типом данных.

(SELECT * 
FROM post 
     LEFT JOIN post_plus 
       ON (post.id = post_plus.news_id) 
     where approve = 1 
ORDER BY fixed DESC, 
      date DESC 
LIMIT 0, 7) 

UNION 

(SELECT c1.postid 
FROM post_category c1 
     JOIN post_category c2 
     ON c1.postid = c2.postid 
WHERE c1.categoryid IN (130, 3, 4, 5) 
     AND c2.categoryid = 73); 

http://dev.mysql.com/doc/refman/5.0/en/union.html

+1

Два запросы не могут иметь одинаковое число столбцов. Они содержат по крайней мере четыре столбца в верхнем запросе. Союз не будет работать. – dcaswell