0

私は、ほとんどうまく機能しているアナグラムクエリを作成している最中です。ここに私のSQLがあります

私が使っている文字は「セッティン?」

違いは、ユーザーが「?」を追加できるワイルドカードです。フィールドに。

SELECT `word`, 0+ABS(`e`-1)+ABS(`i`-1)+ABS(`n`-1)+ABS(`s`-1)+ABS(`t`-2) AS difference
FROM `TWL06`
WHERE LENGTH(`word`) <= 7
HAVING difference <= 1

私のテーブル構造は

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 |
--------------------------------------------------------------------------------------------------------------
THIS | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |

クエリの問題は、すべての文字の差が 0 または 1 の単語のみを抽出することです。一部の文字を含む可能性のある長さの短い単語や、2 3 4 のような短い単語は抽出されません。 5 6 文字の長さ。

wordWHERE LENGTH( ) <= 7 で長さを処理できると思っていましたが、うまくいかないようです。

例: SIT、テント、テスト

または、次のような 1 つのワイルドカードの違いを持つ単語でさえ

TESTY (Y はワイルドカード)

何か案は?

4

2 に答える 2

0

テーブルにデータが取り込まれました: 「setting」、「apple」などをanagram (word, sorted_word)含み、「eginstt」、「aelpp」などを含みます。wordsorted_word

設定のアナグラムを見つけるには、まずソートされた単語を取得します。select sorted_word from anagram where word = "setting"次に、そのソートされた単語を使用してすべてのアナグラムを取得します。select word from anagram where sorted_word = "eginstt"

単一のクエリでも実行できます。

于 2013-06-24T22:01:10.257 に答える
0

それに対する修正が見つかりました

SELECT
    `word`,
    0+IF(`a` > 0, `a` - 0, 0)
    +IF(`b` > 0, `b` - 0, 0)
    +IF(`c` > 0, `c` - 0, 0)
    +IF(`d` > 0, `d` - 0, 0)
    +IF(`e` > 1, `e` - 1, 0)
    +IF(`f` > 0, `f` - 0, 0)
    +IF(`g` > 0, `g` - 0, 0)
    +IF(`h` > 0, `h` - 0, 0)
    +IF(`i` > 1, `i` - 1, 0)
    +IF(`j` > 0, `j` - 0, 0)
    +IF(`k` > 0, `k` - 0, 0)
    +IF(`l` > 0, `l` - 0, 0)
    +IF(`m` > 0, `m` - 0, 0)
    +IF(`n` > 1, `n` - 1, 0)
    +IF(`o` > 0, `o` - 0, 0)
    +IF(`p` > 0, `p` - 0, 0)
    +IF(`q` > 0, `q` - 0, 0)
    +IF(`r` > 0, `r` - 0, 0)
    +IF(`s` > 1, `s` - 1, 0)
    +IF(`t` > 2, `t` - 2, 0)
    +IF(`u` > 0, `u` - 0, 0)
    +IF(`v` > 0, `v` - 0, 0)
    +IF(`w` > 0, `w` - 0, 0)
    +IF(`x` > 0, `x` - 0, 0)
    +IF(`y` > 0, `y` - 0, 0)
    +IF(`z` > 0, `z` - 0, 0) AS difference
FROM `TWL06`
WHERE LENGTH(`word`) <= 8
HAVING difference <= 2
于 2013-06-24T23:20:58.960 に答える