2012-01-02 60 views
0

我有这个查询在两个SQL表中搜索。我正在寻找一种方法来按发生情况对结果进行排序。这是我的查询:在两个表中搜索并按术语顺序搜索

SELECT `parent_id` 
FROM wp_forum_posts 
WHERE text LIKE '%{$term1}%' 
UNION 
SELECT `id` 
FROM wp_forum_threads 
WHERE subject LIKE '%{$term1}% 

哪个是最好的方法,得到结果排序?

+0

由于任一身份证的发生?不管桌子? – xQbert 2012-01-02 21:59:22

回答

1

诀窍是首先使用UNION ALL,它保留重复(普通UNION删除重复),然后从该结果进行选择。此查询应该这样做:

select * from (
    select parent_id as mID, count(*) as cnt 
    from wp_forum_posts 
    where text like '%{$term1}%' 
    group by 1 
    UNION ALL 
    select id, count(*) 
    FROM wp_forum_threads 
    where subject like '%{$term1}% 
    group by 1) x 
order by 2, 1 
0

假设ID和parent_ID在表中不重复,否则你可以得到2行每个ID ...你想他们总结在一起,如果是的话是parent_ID和ID相关?

Select mID, cnt 
FROM 
(SELECT `parent_id` as mID, count(`parent_ID`) as cnt 
FROM wp_forum_posts 
WHERE text LIKE '%{$term1}%' 
Group by `parent_ID` 
UNION 
SELECT `id`, count(`id`) as cnt 
FROM wp_forum_threads 
WHERE subject LIKE '%{$term1}% 
GROUP BY `id`) 
Order by cnt ASC, mID 
+0

是的,id和parent_id是相同的值。 – user998163 2012-01-02 22:07:32