2012-03-05 8 views
0

私はニュース記事を含むテーブルを持っていますが、このテーブルのフィールドの1つはコンマで区切られたタグのリストを含む 'tags'フィールドです - なぜこれは無関係なのでしょうか?従来のテーブルであり、タグを別のテーブルに移植することはできず、テーブル構造やアプリケーションの機能に変更を加えることはできません。タグリストによる関連記事の検索

私は類似のタグを持つ投稿を見つけるためにデータベースを照会する最良の方法を決定しようとしています。

タグフィールドを分割してトリミングしてLIKEクエリを実行するよりも優れた/賢明なソリューションを持っている人はいますか?

+0

のような検索を実行できますか? –

+0

私は完全に同意しますが、それは私の手の外にあるので、私はできることはあまりありません。私は遺産問題を解決する必要があります。後でdbデザイナーを呪います:) –

答えて

0

tagsテーブルを作成し、tagspostsテーブルの間に多くのテーブルを作成し、tags_postsテーブルを作成することができます。

次に、posts.tags列をtagstags_postsに移行できます。

最後にposts.tagsではなくtags_postsを照会することができます。

+0

それは私が避けようとしている解決策です私はアプリケーションの主要な部分も更新する必要があります。残念ながら、データベースにあるものをそのまま残しておく必要があります。 –

+0

posts.tagsに基づいてtags_postsとタグを更新するcronジョブはどうでしょうか? posts.tagsはアプリケーション全体を更新するまで保存し、すぐにtags_postsを使用することができます。 – jpic

+0

それは全体のものを移植するよりも少し良い選択肢ですが、二重性はやりがいのあるものです。そう思わないのですか? –

1

DBに触れることができない場合は、DBの外部に追加の検索インデックスを追加できますか? LuceneまたはSphinx?

我々は、データの潜在的に大量の話をされていない場合は、あなたも任意の外部サービス/ソフトウェアなしでLuceneインデックスを実装するためにZFからのZend_Search_Luceneを使用することができますインストールなど

その後、あなたは、タグによってインデックス投稿をすることができますインデックスを使用して特定のタグ(またはタグと他のプロパティの組み合わせ)を含む投稿を検索し、Luceneから返されたIDに基づいてDBから関連する結果を取得します。

0

sphinx/luceneアーキテクチャに移行するには、いくつかの作業が必要になります。タグを別のテーブルに移動するだけでは難しくなります。 すべての文字列を取得し、すべての文字列を解析するのではなく、最も単純な解決方法は、あまりスマートでないデータベース設計に対して、WHERE instr(concat(",", tags_field,","), ',php,') > 0

関連する問題