SQL - 选择LIKE%的所有行...彼此的%(所有类似的行)

时间:2017-09-03 22:07:47

标签: php mysql sql

例如,让我们在列source中说我有以下条目

SourceFileEmbed122
SourceFile1333
SourceItem13366
PreLoadSource7755

我查询SourceFile它应该匹配第1行和第2行并显示该行的所有列数据,但是如果我搜索示例:PreLoadSourceSourceItem它不应该显示任何内容,因为只有一行有类似的条目。

有点像包含某种东西。

基本上,我想做的事情如下: SELECT source, COUNT(*) TotalCount FROM sources GROUP BY source HAVING COUNT(*) > 1 ORDER BY COUNT(*) DESC

但是查询确实LIKE而不是LIKE%...%(就像在PHPMyAdmin中一样),这导致它只匹配彼此的完全匹配,所以像这样的东西:

row123/
row123

彼此不匹配,将被忽略。但是如果row123的全文全部在另一行的值中,那么我希望这个MATCH基本匹配。然后匹配。

让我说我有:

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行。

2 个答案:

答案 0 :(得分:1)

测试至少两场比赛的一种方法是:

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
             );

答案 1 :(得分:1)

一种方法是使用同一个表进行内连接, 如果你需要一个简单的计数,你可以做这样的事情:

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