Php SQL-选择彼此相似%…%的所有行(所有相似行)

Php SQL-选择彼此相似%…%的所有行(所有相似行),php,mysql,sql,Php,Mysql,Sql,例如,假设在source列中有以下条目 SourceFileEmbed122 SourceFile1333 SourceItem13366 PreLoadSource7755 我对SourceFile进行查询,它应该匹配第1行和第2行,并显示该行的所有列数据,但如果我搜索例如:PrelodSource或SourceItem,它不应该显示任何内容,因为只有一行具有类似的条目 有点像if包含的东西 基本上,我想做一些事情,比如: 从源组中按源选择源、计数*总计数,每个源的计数*大于1,按计数*描述

例如,假设在source列中有以下条目

SourceFileEmbed122
SourceFile1333
SourceItem13366
PreLoadSource7755
我对SourceFile进行查询,它应该匹配第1行和第2行,并显示该行的所有列数据,但如果我搜索例如:PrelodSource或SourceItem,它不应该显示任何内容,因为只有一行具有类似的条目

有点像if包含的东西

基本上,我想做一些事情,比如: 从源组中按源选择源、计数*总计数,每个源的计数*大于1,按计数*描述排序

但是在PHPMyAdmin中,查询是LIKE而不是LIKE%…%LIKE,这导致它只匹配彼此的精确匹配,因此类似于:

row123/
row123
彼此不匹配,将被忽略。但我希望它基本上匹配,如果第123行的全文也都在另一行的值中,那么匹配

假设我有:

http://link.ext/dir123/file.mp3
http://link.ext/dir123
http://link.ext/dir123/file2.mp3
http://link.ext/dir123

查询应匹配…/file.mp3、/file2.mp3和../dir123,因为第2行http://link.ext/dir123 也位于第1、3和4行。

测试至少两个匹配项的一种方法是:

select s.*
from sources s
where s.source like '%<whatever>%' and
      exists (select 1
              from source s2
              where s2.source like '%<whatever>%' and
                    s2.source <> s.source
             );

一种方法是对同一个表进行内部联接, 如果您需要一个简单的计数,您可以这样做:

SELECT s1.source, COUNT(*)
FROM sources s1
INNER JOIN sources s2
    ON s1.id <> s2.id AND s1.source LIKE CONCAT('%', s2.source, '%')
GROUP BY s1.source

您的意思是如果有超过1个匹配项,它将只显示行吗?这真的是关于sql查询中存在AND和OR的问题吗?我希望我是误解了。@FerdinandGaspar Yes显示是否有超过2行,如果它基本上包含源代码,就像基本上我只是想得到一个重复的检查程序,但更好一点,因为我数据库中的某些行有点复杂,但结果完全相同。。。。COUNTsource>1;我更新了我的问题,解释了很多。一开始你有一个拼写错误,但它正好符合我的需要,非常感谢: