この質問は、Googleで表示され、多くのビューを持っているので、私はこの問題への私のアプローチを共有したい:
詳細情報はリンクの下に従ってください。私はコンマ区切りの値も文字列として保存されているので、そのような貧弱なデザインに対処しなければなりませんでした。私はタグを担当するCMSのプラグインを微調整しながら、この問題に遭遇しました。
サイトの記事に関連するタグは、次のように保存されました: "tag1、tag2、...ボール足ボール「と 『ボール『タグの付いたIも得たものを』:、TAGNは」。シンプルLIKE
を使用して、記事をタグ付けしてだから、完全一致を取得することは、最初に登場しているかもしれないほど簡単ではありませんでした』部屋」。重要なのではなく、迷惑なわけではありません。
FIND_IN_SET機能が最初で素晴らしい見えたが、その後、それがインデックスを使用しないと、最初の引数はコンマ文字が含まれている場合は正常に動作しないことが判明しました。
私は、プラグイン自体や深いCMSコアを変更したくはありませんでしたそのプラグインが構築された機能
また、このコード部分WHERE (',' + Categories + ',') LIKE '%,science,%'
は、必要なタグ(部分文字列)が最初の文字列、最後の文字列、中間のどこかにある可能性があることに注意してください。
最後に、私は非常に単純な解決策に終わった。それはこのように私の仕事:カバー
... WHERE tags LIKE 'ball,%' OR tags LIKE '%,ball,%' OR tags LIKE '%,ball'
すべてtheree例。区切り記号として使用されるカンマ同じような落とし穴に出くわした人たちを助けてくれることを願います
PS。私はMySQL/DBのエキスパートではありません。このアプローチの潜在的な欠点について、特に大きなテーブル(特に私の場合ではない、btw)について読んでみたいと思います。私はちょっとした努力をしてこの問題を解決するために私が行った小さな研究の結果を共有しました。
これは、複数値の属性が** evil **である理由です。 – Yuck
@Yuck並行性の問題の増加は、なぜ彼らが**悪**なのかと思った。 –
私はこのデザインを立てる方法はありません。データの子テーブルが必要なので、それを効果的に吟味することができます。カンマ区切りのリストは絶対に保存しないでください。 – HLGEM