2

So, I'm new in PHP and Database and I have a problem here:

I have a table called news and one of its column is tags. This column contains 1 or more tags separated by whitespaces, like economics politics sports. And I have a page which will receive one or more tags as a single parameter and I have to return all rows that contains at least one of this tags.

I could explode the tags and do as many database access as necessary but I'm sure this is not the way to do it =p

LIKE and IN won't work either because the paramater may contain more than 1 tag in any order.

Any help?

4

2 に答える 2

3

それはそれを構築する方法ではありません。

newsというテーブル、tagsというテーブル、tagsToNewsというテーブルがあります。

tagsToNewsには、ニュースアイテムIDとタグIDを記録し、結合して必要なものを取得します。これは、すべてを壊すことなくタグの名前を変更できることも意味します。

于 2012-11-18T20:43:39.977 に答える
2

最も簡単な解決策

テーブルをMyISAMテーブルに変換tagsし、FULLTEXTインデックスを使用してインデックスを作成します。そこから、MATCH()関数を使用して、クエリ文字列(複数の単語を含む場合があります)に対する行の一致値を抽出します

より適応性の高いソリューション

そのテーブルを削除し、行ごとに1つのタグを使用して再作成します。この方法でFULLTEXT配列を効果的に実装します。これは、まさにその通りです。データを分解することを計画している場合は、データを長い文字列に格納することは避けてください。通常、空腹のLIKE演算子に依存する必要がないため、アトミック部分の格納の方がはるかに効率的です。

于 2012-11-18T20:45:02.763 に答える