【发布时间】:2012-10-18 02:14:18
【问题描述】:
到目前为止,我的数据库中有 27 个表。 1个单词表(拼字游戏单词表),26个关联表。
Table Fields
================
word [id,word]
a [word_id,count]
b [word_id,count]
...
z [word_id,count]
我正在尝试找出给定字符串的匹配词。
例如,如果给定的数组是a,n,t 我想知道:ant, tan, at, ta, an, na。
我目前的策略是分解字符串中的每个字母并找到与所有字母匹配的相关单词。
例如:
SELECT word.word
FROM word, a, n, t
WHERE
word.id = a.word_id OR
word.id = n.word_id OR
word.id = t.word_id
但这最终会打印所有包含a,n or t 的单词。
如果我将所有运算符都切换为 AND,我只会遇到一个匹配项:ant。
你能帮我解开这个谜吗?
我还关心如何处理字符串中的重复字母。我认为字母关联表中的count 字段可以在这里提供帮助。如果单词是app,则p关联表中的计数将为2。
我是否在关联表的正确轨道上或有更好的方法?
我试图在 php/mysql 中相当有效地处理这个问题。我知道之前有其他人用 C、perl、java 等解决过这个谜题。
【问题讨论】:
-
你能解释一下你是如何从
[a,n,t]得到你想要的东西的吗? - 对我来说,它看起来像是一个任意的结果列表 -
pa是如何进入a,n,t的结果列表的? -
也许你最好使用正则表达式
^[ant]+$——但不确定这对你的特定问题有多适用。 -
@JanDvorak,哈哈,你是对的。已编辑。
-
@deathApril,是的,
a,n,t是一个任意字符数组作为示例。它可以很容易地成为a,m,t。但生成的单词是可以由相同字符组成的实际单词(在 Scrabble 字典中)。本质上,我想输入一组字符并快速列出可以由给定字符组成的所有匹配单词(使用全部或部分字符)。
标签: php mysql string string-matching