我在我的数据库中有5个表。他们的minimalized版本是这样的:通过多种功能获取数据库的记录
+------------+ +--------------+ +---------------+ +-------------+ +-------------+
| 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和或多个子类别的一部分。 一个子类别只能是一个类别的一部分。
我想显示与特定类别相对应的博客的提要。 我有一些URL形式:http://www.example.com/category_name
。
我所做的是:
我得到category_name。我在类别表中搜索category_id。
我在子类别表中查找所有具有该category_id的子类别。
然后,我在blog_id WHERE category_id IN(子类别的数组)中创建了一个查询,它将Feed和Blog_Subcat表连接起来。
之后,我得到了那个类别中的所有Feed。
现在正在工作,但我的表格仅在一个月内就有大约30,000个Feed,所以我觉得这个过程有点慢。
我最后的查询如下所示:
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...
}
我使用Zend框架为这个项目。我想知道:如果有更好的方法来获取Feed,因为某些类别需要一些时间来加载太长时间?
嗨!我试过了,它仍然很慢,有没有其他方法?我也列了索引。谢谢! – raygo