【问题标题】:Querying MySQL for anagrams查询 MySQL 的字谜
【发布时间】:2011-10-11 15:07:58
【问题描述】:

我有这个脚本:

$db = mysql_connect($hostname, $db_user, $db_password);
mysql_select_db($database,$db) or die( "Unable to select database");
mysql_query("set names 'utf8'");

$wordy = "pate";

$query = mysql_query("SELECT DISTINCT * FROM $db_table WHERE word LIKE '[pate]' ORDER BY word DESC");
$num = mysql_numrows($query); $i=0; 

while ($i < $num) {
    $word = mysql_result($query,$i,"word");

    echo $word." ";
    $i++;
}

$db_table 包含英文单词。我想呼应所有可能的字谜;在这种情况下,它应该回显tape pate peat。我可以使用什么查询来执行此操作?

http://msdn.microsoft.com/en-us/library/ms179859.aspx

【问题讨论】:

  • 好悲痛。所以你在寻找IS_ANAGRAM 之类的?

标签: php mysql sql anagram


【解决方案1】:

我认为首先你必须将单词中的所有字母重新排列成一个数组

然后执行如下 sql 查询:

SELECT DISTINCT * FROM $db_table WHERE word in ($array ) ORDER BY word DESC

有另一个想法:

你可以做类似...

SELECT DISTINCT * FROM $db_table WHERE word like '%$wordy[0]%' AND like '%$wordy[1]%' AND like '%$wordy[2]%' AND like '%$wordy[4]%' ORDER BY word DESC

我建议你使用的 cmets

长度(单词)= strlen($wordy)

【讨论】:

  • 说你使用 php 重新排列字母头并将其存储到一个数组中 -> $array
  • 嗯,我的想法似乎不适合长度 > 8 个字母的单词.. :(
  • 这个想法是我不使用什么排列,我正在寻找最简单的方法
  • $wordy[x] 是单词中的单个字母吗?恐怕这会检索到太多的单词。
  • 是的,这些是单独的字母.. 是的,它们会返回诸如“xxxxpatexxxx”之类的单词,因此您可以再次检查单词的长度,这将解决您的问题.. 对吗?
【解决方案2】:

如果您可以修改包含字典的表,请运行一个脚本,为每个条目添加一个字段,该条目包含按字母顺序排列的单词及其包含的字母。然后,您可以按字母顺序将要搜索的单词中的字母类似地放入并查找匹配项。

按字母顺序排列时,Tape、pate 和 peat 看起来都像“aept”,那么你可以这样做

$query = mysql_query("SELECT * FROM $db_table WHERE alpha = 'aept' ORDER BY word DESC");

【讨论】:

    猜你喜欢
    • 2012-05-17
    • 2013-11-01
    • 2012-07-22
    • 2011-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-11
    • 2011-04-30
    相关资源
    最近更新 更多