使用UNION,JOIN和ORDER by合并2个相同的表

时间:2014-05-06 16:39:34

标签: mysql sql

我需要加入2个相同的表来显示按id排序的相同列表。 (帖子 posts2

恰好在使用1个表之前,我们一直在使用第二个表( posts2 )来存储来自某个ID的新数据。

这是我在使用1个表(帖子)时使用的查询,并且工作正常。

select posts.id_usu,posts.id_cat,posts.titulo,posts.html,posts.slug,posts.fecha,hits.id,hits.hits,usuarios.id,usuarios.usuario,posts.id 
From posts 
Join hits On posts.id = hits.id
Join usuarios On posts.id_usu = usuarios.id 
where posts.id_cat='".$catid."' order by posts.id desc

现在我尝试将此查询应用于Union 2表,但我不知道在什么时候实例化JOINS。我尝试了几种方法,但发送了MYSQL错误。以下查询合并2个表并按ID排序,但需要添加JOIN。

select * from (
    SELECT posts.id,posts.id_usu,posts.id_cat,posts.titulo,posts.html,posts.slug,posts.fecha 
        FROM posts where id_cat='6' ORDER BY id
    )X
UNION ALL
    SELECT posts2.id,posts2.id_usu,posts2.id_cat,posts2.titulo,posts2.html,posts2.slug,posts2.fecha         FROM posts2 where id_cat='4' ORDER BY id DESC limit 20

我需要在上面的查询中添加这个

Join hits On posts.id = hits.id
Join usuarios On posts.id_usu = usuarios.id 

先谢谢你们。

1 个答案:

答案 0 :(得分:2)

如果您想要与第一个查询相同的查询,但这次使用相同表格的联合,即post2,那么您可以这样做

select
p.id_usu,p.id_cat,p.titulo,p.html,p.slug,p.fecha 
,hits.id,hits.hits,usuarios.id,usuarios.usuario
from (
(select 
id_usu,id_cat,titulo,html,slug,fecha ,id
From posts
where id_cat='".$catid."' order by id desc limit 20)

UNION ALL

(select 
id_usu,id_cat,titulo,html,slug,fecha ,id
From posts2
where id_cat='".$catid."' order by id desc limit 20)
) p
Join hits On p.id = hits.id
Join usuarios On p.id_usu = usuarios.id 
order by p.id desc limit 20