2010-10-10 125 views
6
SELECT p.id, p.title, p.uri, 'post' AS search_type 
FROM `posts` AS p 
WHERE title LIKE "%logo%" 

UNION ALL 

SELECT p.id, p.title, p.uri, 'tag' AS search_type 
FROM posts AS p 
INNER JOIN post_tags AS pt ON pt.post_id = p.id 
INNER JOIN tags AS t ON pt.tag_id = t.id 
WHERE t.title LIKE "%logo%" 

UNION ALL 

SELECT p.id, p.title, p.uri, 'category' AS search_type 
FROM posts AS p 
INNER JOIN post_categories AS pc ON pc.post_id = p.id 
INNER JOIN categories AS c ON pc.category_id = c.id 
WHERE c.title LIKE "%logo%" 

GROUP BY p.id 
LIMIT 30 

我想組帖子的ID,所以我不返回重複的搜索結果,但由於某些原因,有重複,甚至當我使用GROUP BY p.id。有人能告訴我我做錯了什麼嗎?MySQL的 - 與UNION ALL和GROUP BY搜索

+0

你只需要每p.id一個結果,無論搜索類型的? – 2010-10-11 10:25:40

+1

嘿馬克,不,我想要所有的結果。 search_type只允許我定義搜索結果來自哪裏(發佈,標籤或類別)。 – Torez 2010-10-13 21:59:35

回答

6

GROUP BY將僅對您的第三部分查詢的結果進行分組。它將首先是GROUP,然後是UNION。

將整個查詢放入子查詢和GROUP中。

6

這裏是不使用MySQL的一個例子:

SELECT Column1, SUM(Column2) AS Column2Total 
FROM 
(
    SELECT Column1, Column2 FROM Table1 
    UNION ALL 
    SELECT Column1, Column2 FROM Table2 
) AS UnionTable 
GROUP BY Column1