Mysql:当其中一行以相同字符串开头时,如何查找其他不同的行值

Mysql:当其中一行以相同字符串开头时,如何查找其他不同的行值,mysql,Mysql,我有一个名为entries的mysql表。行为:成员、id、标题和已添加 使用PhpMyAdmin,在最新的100行(按:added,desc排序)中,我需要: 仅适用于标题以相同的20个字符串开头的案例(字符串的结尾不同,而不是开头) 当标题包含相同的开头时,就应该生成一个列表,其中包含(1)完整标题,(2)id和(3)使用此标题的成员名称 该列表将在这之后用肉眼检查,因此 只要列表有效,就没有关于列表外观的严格规则 很好。最终,这将更像是最新的1000个条目,所以肉眼需要这种预过滤 我自

我有一个名为entries的mysql表。行为:成员、id、标题和已添加

使用PhpMyAdmin,在最新的100行(按:added,desc排序)中,我需要:

  • 仅适用于标题以相同的20个字符串开头的案例(字符串的结尾不同,而不是开头)
  • 当标题包含相同的开头时,就应该生成一个列表,其中包含(1)完整标题,(2)id和(3)使用此标题的成员名称
  • 该列表将在这之后用肉眼检查,因此 只要列表有效,就没有关于列表外观的严格规则 很好。最终,这将更像是最新的1000个条目,所以肉眼需要这种预过滤
我自己能做的最好的事情(对不起!)是输出每个条目的通用列表,然后用我的眼睛手动搜索标题以相同字符开头的情况:

SELECT title, member FROM (
SELECT * FROM entries
ORDER BY added
DESC
LIMIT 0, 100
) AS olitest
ORDER BY title
从我过去写得太差的一个关于stackoverflow的问题来看,有两个不完整的建议,它们可能是一个开始

这一条不会给出成员和id,也不限于最新的100行

select left(e.title, 20), group_concat(title) as titles
from entries e
group by left(e.title, 20)
having count(*) > 1;
这一行显示了标题的总行数

select left(e.title, 20), count(*), max(title) 
from entries e
group by left(e.title, 20)
having count(*) > 1;
唉,更多的东西是我无法做到的。
你知道怎么做吗?

我将此作为答案发布,但我认为这不会让你得到最终结果。我这样做是为了格式和可读性,因为注释不提供格式

我一直在做一个类似于您需求的查询,但运气不好,但这可能会让您更接近

CTE是一个常见的表表达式。它构建了一个临时表来处理

WITH CTE (left(title, 20), DuplicateCount)
 AS
 (
 SELECT left(title, 20),
 ROW_NUMBER() OVER(PARTITION BY left(title, 20) ORDER BY ID) AS DuplicateCount
 FROM entries
 )
 SELECT *
 FROM CTE
 WHERE DuplicateCount > 1
这将为您提供一个输出,其中DuplicateCount显示在具有匹配名称的标题旁边。当ever DuplicateCount大于1时,您将需要执行您的工作

如果这些都不起作用,试试这个

 SELECT left(title, 20),
 ROW_NUMBER() OVER(PARTITION BY left(title, 20) ORDER BY ID) AS DuplicateCount
 FROM entries

我认为您可以使用最后一段代码开始。