gpt4 book ai didi

php - 通过多种函数获取数据库记录

转载 作者:行者123 更新时间:2023-11-30 23:27:40 25 4
gpt4 key购买 nike

我的数据库中有 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 个或多个子类别。一个子类别只能是一个类别的一部分。

我想显示对应于特定类别的博客的提要。我有一些以下形式的 URL:http://www.example.com/category_name

我做的是:

我得到类别名称。我在类别表中搜索 category_id。
我在 Sub-Category 表中查看所有具有该 category_id 的子类别。

然后我进行查询,在 blog_id WHERE category_id IN(子类别数组)上连接 Feed 和 Blog_Subcat 表。

之后,我获得了该类别中的所有 Feed。

目前正在运行,但我的表在一个月内有大约 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...
}

我正在为这个项目使用 Zend Framework。我想知道:是否有更好的方法来获取提要,因为某些类别的加载时间有点太长?

最佳答案

试试这个:

$columns = array(
// whatever columns you ultimately want to select in this array
// example: 'title' => 'blogs.title' queries 'blogs.title AS title'
);
$select = $db->select(); // where $db is your Zend_Db_Adapter instance
$select -> from('feeds as f',$columns);
$select -> join('blogs as b','b.id = f.blog_id',array());
$select -> join('blog_subcat as bs','bs.blog_id = f.blog_id',array());
$select -> join('subcategories as s','s.id = bs.subcat_id',array());
$select -> join('categories as c','c.id = s.cat_id',array());
$select -> where('c.name = ?',$categoryName);
$select -> order('f.date_created DESC');
$select -> group('f.id');
$select -> limit($count,$pageNumber - 1);
$results = $db->fetchAll($select);
// and then whatever you do to populate view models

我认为数据库可以优化的一个查询比多个查询拼凑同一件事的性能要好。特别是如果您使用远程 MySQL 服务器...

关于php - 通过多种函数获取数据库记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12396266/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com