3

我试图找出一种在 MySQL 上将“字谜”函数作为存储过程的方法。假设我有一个包含字典中所有单词的数据库 - 我想输入一些字母的参数作为 VARCHAR 并返回组成这些字母的字谜的单词列表。

我想我的意思是,我如何运行 SQL 命令来说“选择所有与参数长度相同的单词并包含参数中的每个字母”。

我已经探索了可用的字符串函数(http://www.hscripts.com/tutorials/mysql/string-function.php)。我确信这些可以以某种方式结合使用,但是当它变得复杂时不能完全正确地使用语法。

我是 SQL 新手,似乎可用的字符串函数非常有限。任何帮助将不胜感激 :)

4

2 回答 2

2

你没有;让关系数据库去做是不明智的。

但是,如果有人在枪口下强迫我使用关系数据库实现字谜查找,我会像这样对其进行非规范化:

word | sorted
-----|-------
bar  | abr
bra  | abr
keel | eekl
leek | eekl

其中“排序”由“单词”中的所有字母组成,使用您喜欢的任何规则进行排序,只要它是一个总顺序。您将使用SQL 以外的其他方法来计算该部分

然后你可以找到这样的字谜:

SELECT w2.word AS anagram
FROM words w1
JOIN words w2 ON w1.sorted=w2.sorted
WHERE w1.word = 'leek'
AND w2.word <> w1.word
于 2013-06-17T22:52:00.747 回答
0

SQL 可能不是执行此操作的正确位置,您应该在前端执行此操作。

首先考虑一个字谜的属性,它与字典中的单词长度相同。您可以从检索这些单词开始。

不要为每个字母创建一个变量,而是考虑使用一个数组每个字母映射到一个索引(a=0、b=3 等...)。每次遇到该字母时,都会增加该存储桶的值,因此对于单词“dad”,您最终会得到一个如下所示的结构:

arr[0]=1, arr[1]=0, arr[2]=0, arr[3]=2, arr[4]=0等等...

现在您可以查看您的单词是否与数组中的每个项目匹配。

虽然在 SQL 中并非不可能,但您可以在数据库中表示这种逻辑,例如另一个表将引用字典单词并且每个元组都是数组,然后您可以检索具有相同值的所有项目.

于 2013-06-17T22:25:38.740 回答