我在我的數據庫中有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