Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在string wordsolver应用程序中,如何从简单的mysql/php单词中的字符串中查找单词匹配?_Php_Mysql_String_Performance - Fatal编程技术网

在string wordsolver应用程序中,如何从简单的mysql/php单词中的字符串中查找单词匹配?

在string wordsolver应用程序中,如何从简单的mysql/php单词中的字符串中查找单词匹配?,php,mysql,string,performance,Php,Mysql,String,Performance,我的数据库中有27个表。一个单词表是拼字列表,26个关联表 Table Fields ================ word [id,word] a [word_id] b [word_id] ... z [word_id] 我正试图找出给定字符串的匹配词 例如,如果给定的字符串是pant,我想知道:pant、apt、pat、tap、ant、tan、nap、pan、at、ta、pa、an、na 我目前的策略是分解字符串中的每个字母,并找到与所有字母匹配的

我的数据库中有27个表。一个单词表是拼字列表,26个关联表

Table  Fields
================
word   [id,word]
a      [word_id]
b      [word_id]
...
z      [word_id]
我正试图找出给定字符串的匹配词

例如,如果给定的字符串是pant,我想知道:pant、apt、pat、tap、ant、tan、nap、pan、at、ta、pa、an、na

我目前的策略是分解字符串中的每个字母,并找到与所有字母匹配的相关单词

例如:

SELECT word.word
FROM word, p, a, n, t
WHERE
    word.id = p.word_id OR
    word.id = a.word_id OR
    word.id = n.word_id OR
    word.id = t.word_id
但这最终会打印出所有包含p、a、n或t的单词

如果我把所有的操作符都切换到And,我只会遇到一个匹配项:pant

你能帮我解开这个谜吗

我还关心如何处理字符串中的重复字母。例如,PPANT应该为应用程序找到匹配项,而普通裤子不应该

我使用关联表的方法正确吗?还是有更好的方法


我试图在php/mysql中相当有效地处理这个问题。我知道还有其他人以前用C、perl、java等语言解决过这个难题。

我不熟悉MySQL的高级功能,所以我不能说是否有办法按程序执行此限制,这可能会节省大量存储空间。尽管如此,我还是会提供这种可能性

假设这是您的word表格:

+==========+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+
|   word   | a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w | x | y | z |
+==========+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+
| pant     | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
+==========+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+
| ppant    | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 2 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
+==========+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+
| app      | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
+==========+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+
| kick     | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
+==========+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+===+
那么您的查询可能如下所示:

SELECT word.word FROM word
JOIN
(
  SELECT * FROM word WHERE word.word = "pant"
) AS root
ON
    word.a <= root.a
AND word.b <= root.b
AND word.c <= root.c
AND word.d <= root.d
AND word.e <= root.e
AND word.f <= root.f
AND word.g <= root.g
AND word.h <= root.h
AND word.i <= root.i
AND word.j <= root.j
AND word.k <= root.k
AND word.l <= root.l
AND word.m <= root.m
AND word.n <= root.n
AND word.o <= root.o
AND word.p <= root.p
AND word.q <= root.q
AND word.r <= root.r
AND word.s <= root.s
AND word.t <= root.t
AND word.u <= root.u
AND word.v <= root.v
AND word.w <= root.w
AND word.x <= root.x
AND word.y <= root.y
AND word.z <= root.z

现在,当然有一些方法可以规范化表,还有多种方法可以创建查询。你应该尝试一下什么对你的情况最有意义。

我不确定这将如何匹配没有确切字母要求的单词。例如,给定字符串:anppt,它将如何返回单词app?或者甚至考虑到你提到的字符串,anpt,你如何从中得到ant或at?你是对的Ryan。我的解决方案只能找到字谜。我已经更新了我的答案。