データベースに5つのテーブルがあります。それらの最小化されたバージョンは次のようになります。
+------------+ +--------------+ +---------------+ +-------------+ +-------------+
| Blog | | Feed | | Category | | SubCategory | | Blog_Subcat |
+------------+ +--------------+ +---------------+ +-------------+ +-------------+
| blog_id | | feed_id | | category_id | | subcat_id | | blog_id |
| blog_title | | blog_id | | category_name | | subcat_name | | subcat_id |
| blog_blog | | feed_content | +---------------+ | category_id | +-------------+
+------------+ +--------------+ +-------------+
ほとんどの場合、1つのブログを1つ以上のサブカテゴリに含めることができます。1つのサブカテゴリは、1つのカテゴリの一部にしかなれません。
特定のカテゴリに対応するブログのフィードを表示したい。次の形式のURLがありますhttp://www.example.com/category_name
。
私がしていることは:
category_nameを取得します。カテゴリテーブルでcategory_idを検索します。
Sub-Categoryテーブルで、そのcategory_idを持つすべてのサブカテゴリを調べます。
次に、blog_id WHERE category_id IN(サブカテゴリの配列)のFeedテーブルとBlog_Subcatテーブルを結合するクエリを作成します。
その後、そのカテゴリに含まれるすべてのフィードを取得します。
現在は機能していますが、私のテーブルにはたった1か月で約30,000のフィードがあるため、このプロセスは少し遅いと感じています。
私の最後のクエリは次のようになります。
public static function findLastPosts($subcategories=false){
$table = new self;
$query = $table->select()->setIntegrityCheck(false);
$query->from('feeds', array('feeds.blog_id', 'feeds.feed_id', 'feeds.feed_content'));
$query->join(
'blog_subcat',
'blog_subcat.blog_id = feeds.blog_id',
array('blog_subcat.blog_id')
);
$query->where('blog_subcat.category IN (?)', $subcategories);
$query->where('feeds.date_created <= NOW()');
$query->order('ati_feeds.date_created DESC');
//rest of my code...
}
このプロジェクトではZendFrameworkを使用しています。知りたいのですが、一部のカテゴリの読み込みに少し時間がかかりすぎるため、フィードを取得するためのより良い方法があるかどうかを確認します。