0

私は、ユーザーがアイテムをアップロードして「タグ」を追加し、検索結果に表示されるようにするシステムの作成に取り組んでいます。現在、次のように機能するデータベースがあります。

id|title|tags

ユーザーtagsが自分で入力したタグのコンマ区切りのリストです。これはひどい方法だと読んだことがありますが、タグ テーブルを持ち、各 ID をアイテム レコードと共に格納することは、基本的に同じことです。

検索を実行して、最も関連性の高い結果を最初に返すにはどうすればよいですか? 私は現在これを使用していますが、これは機能しますが、関連性でソートしません: SELECT * FROM items WHERE tags LIKE '%$tag%' LIMIT 0,20";where$tagは単なるタグで、コンマはありません (ループ内にあります)。

4

1 に答える 1

7

having a tags table and storing each ID along with the item record is basically the same thing

番号。番号。番号。それは間違いなく同じことではありません。

「カンマ区切りリスト」バージョンを使用して、これらの問題を達成するためのクエリを考え出そうとします。

  1. すべてのタイトルからタグ ID #7 を削除
  2. タグ #87 を使用しているタイトルの数

適切に正規化されたテーブルの場合:

  1. DELETE FROM users_tags WHERE tag_id=7
  2. SELECT count(*) FROM users_tags WHERE tag_id = 87

あなたのバージョンで:

  1. UPDATE users_tags SET tags=....ここに非常に醜い文字列操作を挿入します...
  2. SELECT count(*) FROM users_tags WHERE tag_id=87 OR tag_id='87,%' OR tag_id LIKE '%,87,%' または tag_id LIKE '%,87'

違いを見ます?

于 2013-01-25T19:16:42.980 に答える