データベース内のキーワードが記事のタイトルまたは記事のタグに対応する mysql データベースからエントリを取得しようとしています。現時点では instr を使用していますが、これは十分に具体的ではありません。なぜなら、短いキーワードに対してあまりにも多くの無関係な結果が取得されることがわかったからです。タイトルまたはタグ リストに「art」という単語が含まれているエントリを取得しようとしましたが、「article」などの単語を含む他のエントリを取得してしまいます。
次のテーブル構造があります。データベースには、事前定義されたタグのリストがあります。各記事カテゴリには、メインのタグ リストから多数のタグが割り当てられます。
tags_tbl (overall tags list)
tt_tag_id (pk) int
tt_tag varchar
category_tag_assignments_tbl (the category which a tag is assigned to)
cta_id (pk) int
cta_tag_for_id (fk to tags_tbl.tt_tag_id) int
cat_for_id (fk to category table) int
私のクエリは次のとおりです。
SELECT * FROM tags_tbl INNER JOIN category_tag_assignments_tbl ON tags_tbl.tt_tag_id = category_tag_assignments_tbl.cta_tag_for_id WHERE instr('The Article Title' , tags_tbl.tt_tag) > 0 OR instr('these,are,article,tags' , tags_tbl.tt_tag) > 0
タグリストがスペースなしのコンマで区切られていますか? PHP 処理の量を最小限に抑えたい - 事前に PHP で変更しない限り、これらは外部ソースから提供されるため、タイトルとタグの実際の表示を制御することはできません。
私は次の正規表現を組み込むことを考えています。これは、stackoverflow でここで見つけましたが、検索用語内で検索しているため、この場合に適用する方法がわかりません (不器用な表現で申し訳ありませんが、私は考えることができません他にどのように言うか):
WHERE tags_tbl.tt_tag REGEXP '[[:<:]]art[[:>:]]'
ありがとう!