2011-06-27 15 views
0

私はスフィンクスインデックスに必要なデータを選択するクエリを持っています。私がすることの1つは、複数の別名、異なる言語などのconcat_wsです。これは、名前が重複しているときに問題が発生します。たとえば、1つのエントリの名前は「Clannad」で、代替タイトルは「CLANNAD - クラナド - 」です。もう一つは「Clannad After Story」、「クラナドアフターストリー」、「Clannad:After Story」という名前があります。今私はこの特定のケースでは簡単に解決されるだろうと知っているので、私と一緒にいらっしゃいますが、私はそれを全面的に適用したいと考えています。 「Clannad」を検索すると、「Clannad」のダブルマッチのためにAfter Storyのエントリが最初に表示されます。重複する単語を削除するmysql concat_ws

私がしたいのは、concat_wsステートメントですべての重複する単語/非固有の単語を削除することです。それが可能であれば。マルク・コメントで示唆したように(私はこれがここに私の最初のもの、正しくこの質問を構造化を望む) は、この非常に、

+1

これはSQLで非常に苦労します。クライアントスクリプトで後処理するほうがはるかに簡単です。 –

+0

それはスフィンクスのために/私はそれを行うことができるか分からない。おそらく、私はすべてのことを再考し、代わりにスフィンクスが使用する第4の事前結合された列を持ち、それをmysqlの外で作成させるべきです。 – Joppe

答えて

0

ありがとう

SELECT CONCAT_WS(' ',a.Name,a.Name2,a.Name3,a.Name4) AS name 

クエリは次のようになりますSQL(私が見る限り)で管理するのは辛いです。私は別の列に処理された値をキャッシュすることをお勧めし、それをインデックスします。

SELECT a.name_words AS name, ... 

それぞれの名前の値を組み合わせて、別個の単語を取得することは別の問題ですが、それは本当にあなたが手にしている言語に依存します。正規表現はいくつかの助けになるはずです - ここでRubyの簡単な試行があります:

[name, name2, name3, name4].join(' ').split(/\b/).reject { |word| 
    word.blank? 
}.collect { |word| 
    word.downcase 
}.uniq 
関連する問題