我在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
";
答案 0 :(得分:1)
SELECT DISTINCT
将删除一个SELECT
语句中的重复项。 UNION ALL
指示系统不要在您要合并的两个集合之间查找重复项(每个SELECT
)。
使用UNION
(不使用ALL
)代替。请注意,删除对重复项的检查更快,因此如果您知道要查询的集是唯一的,请跳过重复检查。
另请注意,通过行重复,我指的是每行中的每一列。如果任何列使行唯一,它将出现在结果集中。如果您只希望某些列具有唯一性,则您需要GROUP BY
并聚合其他列(例如GROUP_CONCAT
)或使用其他查询来获取其他相关数据。