2012-01-21 118 views
0

我正在做一个简单的论坛搜索我的网站,该网站从2个表中提取数据。简单搜索中的sql双记录

SELECT ft.id, ft.title, ft.date 
    FROM forum_topics ft 
    WHERE ft.title LIKE '%" .$search. "%' OR ft.body LIKE '%" .$search. "%' 
UNION SELECT fr.topic, ft.title, fr.date 
    FROM forum_replies fr 
    INNER JOIN forum_topics ft ON fr.topic=ft.id 
    WHERE fr.body LIKE '%" .$search. "%' 
ORDER BY date DESC 

它拉副本,如果它发现两个表中的术语,我怎样才能使它所以它不会显示重复的记录,如果结果的id是一样的。

回答

0

您可以尝试在包装的另一个选择UNION,并在所有列添加GROUP BY

SELECT g.id, g.title, g.date 
FROM (
    SELECT ft.id, ft.title, ft.date 
    FROM forum_topics ft 
    WHERE ft.title LIKE '%" .$search. "%' OR ft.body LIKE '%" .$search. "%' 
    UNION 
    SELECT fr.topic as id, ft.title, fr.date 
    FROM forum_replies fr 
    INNER JOIN forum_topics ft ON fr.topic=ft.id 
    WHERE fr.body LIKE '%" .$search. "%' 
) g 
GROUP BY g.id, g.title, g.date 
ORDER BY g.date DESC 
0

你可以在一个SELECT DISTINCT ID,标题,日期FROM(上面的查询)包裹。

或者,您可以将一行添加到select-from-ft的WHERE子句中,其ID不存在于fr中。