开发者

MySQL - Searching with UNION ALL and GROUP BY

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

I am trying to group the post ID's so I do not return duplicate search results, but for some reason there are duplicate开发者_JS百科s even when I use the GROUP BY p.id. Can someone tell me what I am doing wrong?


The GROUP BY will group results of your third part of query only. It will first GROUP, then UNION.

Enclose the whole query into a subquery and GROUP on it.


Here is an example that doesn't work with 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
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜