2016-08-09 16 views
0

表カテゴリ:PHP選択カテゴリとカウント数

id, name,  
------------- 
1 category1 
2 category2 
3 category3 
4 category4 

表の記事:

id, category, title 
-------------------- 
1 1, 3  title1 
2 4, 2  title2 
3 1, 4  title3 

私はこのカテゴリでshowカテゴリとカウンターポストを持っていると思います。表のカテゴリ欄には、カテゴリのIDが「、」で区切られています。それを行う方法は、カテゴリ=カテゴリIDと最少のSQLクエリでカウンタを表示するときに検索されます。

+5

データ構造に、ポストおよびカテゴリごとに1行の適切なジャンクション表があるように修正します。 –

+2

特に検索したい場合は、csvを使用しないでください。行に複数の値が必要な場合は、 'id'と各' category'の行を持つ新しいテーブルを作成します。 – Sean

答えて

4

投稿とカテゴリごとに1行ずつデータ構造を修正する必要があります。カンマで区切られたリストはではなく、です。これは、SQLを使用してさまざまな理由でデータを格納する方法です。これを接合テーブルに変更する必要があります。

  • 数字は数字ではなく文字列として格納する必要があります。ここでは

    はいくつかの理由です。
  • 外部キーの関係は適切に定義されている必要があり、文字列を使って数値に変換することはできません。
  • 属性には、のいずれかが含まれます。の値。
  • MySQLは文字列処理関数をあまりサポートしていません。
  • インデックスを使用して列を使用するクエリを最適化することはできません。

この情報には、PostCategoriesという名前のテーブルが必要です。

時には、私たちは他の人々の設計上の間違いに悩まされています。そのような場合は、次のような問合せを使用できます。

select c.id, count(*) 
from posts p join 
    categories c 
    on find_in_set(c.id, replace(p.category)) > 0 
group by c.id; 
+1

驚くほど多くの人が[ゼロ、1つまたは無限のルール]を知らない(http://en.wikipedia.org/wiki/Zero_one_infinity_rule)。 – tadman

関連する問題