使用 Mysql 获取所有重复的术语的名称
Get the name of all term which is duplicate using Mysql
我正在编写代码以使用 mysql 查询获取所有具有重复名称的重复术语。我目前遇到的问题是我一次获得记录我需要所有具有相同名称的数据。
我是运行这个查询。
SELECT a.*,COUNT(name) AS occurrences
FROM wp_terms AS a
INNER JOIN wp_term_taxonomy AS b ON a.term_id = b.term_id
WHERE b.taxonomy = "ticker"
GROUP BY a.name HAVING occurrences > 1'
当前结果
[0] => stdClass Object
(
[term_id] => 13872
[name] => AAV
[slug] => aav
[term_group] => 0
[occurrences] => 2
)
预期结果
[0] => stdClass Object
(
[term_id] => 13872
[name] => AAV
[slug] => aav
[term_group] => 0
[occurrences] => 2
)
[1] => stdClass Object
(
[term_id] => 13873
[name] => AAV
[slug] => aav-2
[term_group] => 0
[occurrences] => 2
)
有什么想法吗?
您可以使用 window 函数获取匹配的行:
SELECT t.*
FROM (SELECT t.*,
COUNT(*) OVER (PARTITION BY t.name) as cnt
FROM wp_terms t JOIN
wp_term_taxonomy tt
ON t.term_id = tt.term_id
WHERE tt.taxonomy = 'ticker'
) t
WHERE cnt > 1
ORDER BY cnt DESC, name;
编辑:
MySQL 的旧版本中有多种方法。一个是:
SELECT t.*,
(SELECT COUNT(*)
FROM wp_term_taxonomy tt
WHERE tt.term_id = t.term_id AND
tt.taxonomy = 'ticker'
) t
FROM wp_terms t
HAVING cnt > 1
ORDER BY cnt DESC, name;
我正在编写代码以使用 mysql 查询获取所有具有重复名称的重复术语。我目前遇到的问题是我一次获得记录我需要所有具有相同名称的数据。
我是运行这个查询。
SELECT a.*,COUNT(name) AS occurrences
FROM wp_terms AS a
INNER JOIN wp_term_taxonomy AS b ON a.term_id = b.term_id
WHERE b.taxonomy = "ticker"
GROUP BY a.name HAVING occurrences > 1'
当前结果
[0] => stdClass Object
(
[term_id] => 13872
[name] => AAV
[slug] => aav
[term_group] => 0
[occurrences] => 2
)
预期结果
[0] => stdClass Object
(
[term_id] => 13872
[name] => AAV
[slug] => aav
[term_group] => 0
[occurrences] => 2
)
[1] => stdClass Object
(
[term_id] => 13873
[name] => AAV
[slug] => aav-2
[term_group] => 0
[occurrences] => 2
)
有什么想法吗?
您可以使用 window 函数获取匹配的行:
SELECT t.*
FROM (SELECT t.*,
COUNT(*) OVER (PARTITION BY t.name) as cnt
FROM wp_terms t JOIN
wp_term_taxonomy tt
ON t.term_id = tt.term_id
WHERE tt.taxonomy = 'ticker'
) t
WHERE cnt > 1
ORDER BY cnt DESC, name;
编辑:
MySQL 的旧版本中有多种方法。一个是:
SELECT t.*,
(SELECT COUNT(*)
FROM wp_term_taxonomy tt
WHERE tt.term_id = t.term_id AND
tt.taxonomy = 'ticker'
) t
FROM wp_terms t
HAVING cnt > 1
ORDER BY cnt DESC, name;