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