私はニュースサイトを構築しました: - 記事はフロントページの日付順に表示されます。最新のものが最初です。 - ニュースは、 "id"、 "title"、 "text"などのフィールドを持つニュース "テーブル"にあります。 - すべての記事に関連するタグが1〜5つタグ付きです。 - タグは、 "id"、 "tag"、 "article"などのフィールドを持つテーブル "tags"にあります。 - 「tags」のフィールド「article」は、「news」のフィールド「id」に適合します。ベストDB(MySQL)の構造:お気に入りのタグを含む記事
ここで、ユーザーに「お気に入りのタグリスト」にタグを追加する機会を与えたいと思います。次に、ユーザーは好評のタグの1つを含むニュース記事のみを表示する必要があります。
ユーザBobが「barack obama」、「nba」、「new jersey」および「dogs」というタグを好んでいると仮定します。彼はこれらの4つのタグの少なくとも1つを含む記事だけを見るべきです。
これを実現するPHP/MySQLスクリプトをどのようにコード化できますか?私のデータベース構造はこの目的には十分ではないと思いますか?
"SELECT * FROM news WHERE ID IN( 'barack obama'、 'nba'、 'new jersey'、 'dogs')のようなDBクエリを作成する必要があります。 "
このクエリは長い間実行されるでしょうか?私よりも適切なデータベース構造が必要です。この問題のアイデアはありますか?どのDB構造が必要なのか、どんなクエリを使用する必要がありますか?
私があなたを助けてくれることを願っています。前もって感謝します!
この素早く良い答えをありがとうございます。私は最後の質問があります:どのフィールドにインデックスを設定すべきですか?私は、「ニュース」のプライマリとして「id」を、プライマリとして「id」、プライマリとして「tag」、「tag_id、news_id」を一意に「tag」、「tag_map」を「news_id」、 、最後に "user_id、tag_id"をプライマリ、 "tag_id"を "favorite_tags"に設定します。これは正しいです? – caw
大雑把な表情だが、テーブルを作成して「EXPLAIN SELECT」などを行うことで二重にチェックする。 –
これは、tag_map.tag_id、news.id、およびfavorite_tags.user_idにインデックスを付けたいと思うクエリ。 –