0

次のような投稿テーブルがあります。

----- 投稿 -----
- id
- ..etc..
- カテゴリ1
- カテゴリ2
- カテゴリ3

これらのカテゴリのいずれかをフィルター処理することができ、次のような SQL ステートメントを作成することを計画していました。

SELECT * 
  FROM posts 
 WHERE category1='..sth..' 
   AND category1='..sth..' 
    OR category1='..sth..' 
    OR category2='..sth..' 
    OR category3='..sth..' 
   AND category3='..sth..' 
   OR ..."

これは悪い習慣であり、パフォーマンスの問題はありますか?

編集:私が与えたクエリの AND および OR ステートメントは、単なる例です。

4

3 に答える 3

1

一般に、いいえ、これは悪い習慣ではありません。ただし、POSTS テーブルにカテゴリのリストがあるということは、おそらくデータベース構造を正規化またはリファクタリングする必要があることを示しています。質問に表示されている 3 つのカテゴリには特定の特別な意味がある可能性があると思いますが、より良い列名でそれを示したいと思います。

次の構造を使用すると、投稿を必要な数のカテゴリに分類できます。

投稿:

  • ID

カテゴリー:

  • ID

POST_CATEGORIES :

  • post_id
  • カテゴリ ID

この構造により、クエリが次のように簡素化されます。

SELECT *
  FROM POSTS
  JOIN POST_CATEGORIES
    ON POSTS.id = POST_CATEGORIES.post_id
 WHERE POST_CATEGORIES.category_id = "...sth...";
于 2013-09-16T20:51:20.877 に答える