mysql DISTINCT关键字不适用于多列连接表

时间:2014-08-13 17:40:57

标签: php mysql sql

我在mySQL查询中使用了mysql DISTNCT关键字,以避免重复显示在搜索框上的数据。

但是当我在SELECT上添加多个列名时,它不起作用。

请告知如何继续。

$query = "

    SELECT * FROM (
        SELECT DISTINCT b.title,b.id, b.metakey
            FROM categories b
            WHERE  b.title like '%".$searchc."%' AND b.parent_id BETWEEN 84 AND 107 AND  b.level=3 ORDER BY LOCATE('".$searchc."', REPLACE(b.title, ' ', '')), b.title
    ) CLASS_CAT
        UNION ALL
            SELECT * FROM (
                SELECT DISTINCT a.title,  a.id, a.title as metakey
                    FROM content a join
                      categories b
                      on a.categories_id = b.id
                WHERE REPLACE(a.title, ' ', '') like '%".$searchc."%' 
                AND b.parent_id BETWEEN 84 AND 107 AND b.level=3 
             ) CLASS_ITEM
";

1 个答案:

答案 0 :(得分:1)

SELECT DISTINCT将删除一个SELECT语句中的重复项。 UNION ALL指示系统不要在您要合并的两个集合之间查找重复项(每个SELECT)。

使用UNION(不使用ALL)代替。请注意,删除对重复项的检查更快,因此如果您知道要查询的集是唯一的,请跳过重复检查。

另请注意,通过行重复,我指的是每行中的每一列。如果任何列使行唯一,它将出现在结果集中。如果您只希望某些列具有唯一性,则您需要GROUP BY并聚合其他列(例如GROUP_CONCAT)或使用其他查询来获取其他相关数据。