字谜查找程序 php mysql
Posted
技术标签:
【中文标题】字谜查找程序 php mysql【英文标题】:anagram finder program php mysql 【发布时间】:2012-07-22 10:23:52 【问题描述】:我正在尝试在 php mysql 中为 anagram finder 编写一个程序。我在数据库中有一个字典,它只有一个名为“word”的字段,它包含 500000 行。
通过使用 php,我尝试从数据库中一个一个地提取单词。在得到一个单词后,我创建了 2 个 for 循环来执行逐个字符的比较。
例如..让输入单词为'abcdef'..
考虑我正在从数据库中获取单词“fade”..
我正在编写一个循环并检查单词 fade 是否在 abcdef 中。如果是,我正在打印该单词。如果不是,我将从数据库中获取下一个单词。
我写了代码..但我得到一个空页面作为输出..请帮助..
我还有一个问题。有没有其他方法可以在不使用逐字符比较的情况下找到单词的子字符串?
例如:如果我的输入是 fedcba.. 我将其排序为 abcdef.. 并且字典单词是淡入淡出的,我将其排序为 adef.. 是任何函数来查找 adef 是否是 abcdef 的子字符串..
【问题讨论】:
"我写了代码.." 你的代码是什么? 【参考方案1】:您必须编写自己的用户定义函数来获取排序的字母字符串:
CREATE FUNCTION fn_sort_string(arg_word VARCHAR(255)) RETURNS VARCHAR(255)
BEGIN
DROP TEMPORARY TABLE IF EXISTS temp;
CREATE TEMPORARY TABLE temp(letter CHAR(1));
SET @var_counter = 0;
SET @var_len = LENGTH(arg_word);
WHILE(@var_counter < @var_len)
DO
INSERT INTO temp VALUES (SUBSTRING(arg_word, @var_counter, 1));
SET @var_counter = @var_counter + 1;
END WHILE;
SELECT GROUP_CONCAT(DISTINCT letter ORDER BY letter SEPARATOR '')
INTO @var_sort_word
FROM temp;
DROP TEMPORARY TABLE IF EXISTS temp;
RETURN IFNULL(@var_sort_word, "");
END;
以下查询将在已排序的字典单词中找到已排序的输入单词:
SELECT *
FROM dictionary
WHERE fn_sort_string(input_word) LIKE CONCAT('%',fn_sort_string(word),'%');
【讨论】:
是的,这将产生一个包含所有可能单词的数组,其中包含您需要的子字符串,因此您不需要向数据库发出 500000 个请求。【参考方案2】:忘记检查 PHP 中的每个单词。这是 CPU 的噩梦!
在您的表格中添加第二列,并按字母顺序拼写单词。例如:
Word : AlphaWord
Test : estt
然后你可以像这样简单地运行一个查询:
select word from table 1 where AlphaWord = (select AlphaWord from table1 where word='$yourWord') order by word asc;
编辑:如果您不想在其他单词中匹配单词,您可以在 AlphaWord 列上弹出全文搜索索引,然后使用 Match()... against() 语法,这将非常快速地返回匹配项。但是,由于此运算符仅允许将通配符放在搜索字符串的末尾,因此它不会将 machete->aceehmt
与 ache->aceh
匹配。话虽如此,老实说,您实际上无法在正常搜索中添加匹配它们的通配符。
【讨论】:
打败我。如果您希望程序在毫秒而不是几分钟内响应,那肯定会好得多。还要记住将 AlphaWord 列添加为索引,以便查找更快。ALTER TABLE [tablename] ADD INDEX AlphaWord (AlphaWord);
考虑我的词是 abcdef.. 现在内部查询将获取所有 AlphaWord 行,它们是 'abcdef' 并且将传递给外部查询并且将检索词.. 但是单词 abcd 是也是 abcdef 的字谜。正确的?我想获取所有可以从 abcdef 组成的单词
是的..正如你所说,我的程序中的条件与 aceh 不匹配。还有其他方法吗?以上是关于字谜查找程序 php mysql的主要内容,如果未能解决你的问题,请参考以下文章
php |字谜求解器通过 woldcard 查找不在原始搜索中的字母