我需要创建一个脚本来搜索带有"blanks"的单词,这些单词在sql中基本上是%。
$numberofblanks = 1; //max 13
$searchedword = "WORD";
$searchedwordsorted = "DORW";
给出的结果应为:
冗长的世界人群剑单词嫁妆划淹没榫吵闹的
%word,w%ord,wo%rd,wor%d,word%就可以了,但如果查询更复杂,有2个或多个空格呢?
我还想知道$searchedwordported是否有帮助,或者它并不重要,只是浪费了我桌子上的空间。
非常感谢你们的帮助。
.mike
首先,我想纠正您问题中的一个错误。在您的查询中,您指的是_
,而不是%
。%
表示任意数量的字符(零个或更多)。使用_
表示一个字符。
现在来看解决方案。。。实际上,您并不需要将已排序的单词存储在数据库中。你可以这样做:
SELECT word
FROM dictionary
WHERE CHAR_LENGTH(word) = 6
AND word LIKE '%W%'
AND word LIKE '%O%'
AND word LIKE '%R%'
AND word LIKE '%D%'
如果您的输入中有重复的字母,则需要正确处理,以确保所有结果都包含所有重复的字母。例如,如果输入是FOO__
,则需要检查每个单词是否与%F%
和%O%O%
都匹配。
SELECT word
FROM dictionary
WHERE CHAR_LENGTH(word) = 5
AND word LIKE '%F%'
AND word LIKE '%O%O%'
请注意,这种方法将需要对表进行完全扫描,因此不会特别有效。您可以通过将每个单词的长度存储在一个单独的列中并对该列进行索引来稍微改进。
如果您有sortedword
,那么您可以通过省略重复字母之间的%
来提高性能,因为您知道它们将连续出现在sortedword
中。这可以提高性能,因为它减少了失败匹配所需的回溯次数。
SELECT word
FROM dictionary
WHERE CHAR_LENGTH(word) = 5
AND sortedword LIKE '%F%'
AND sortedword LIKE '%OO%'
另一种需要sortedword
存在的方法如下:
SELECT word
FROM dictionary
WHERE CHAR_LENGTH(word) = 5
AND sortedword LIKE '%D%O%R%W%'
同样,这需要对表格进行全面扫描。同样,如果你有重复的字母,你不需要它们之间的%
。
SELECT word
FROM dictionary
WHERE CHAR_LENGTH(word) = 5
AND sortedword LIKE '%F%OO%'