如果我有两个表(即blog_category和blog),则每个“blog”只能属于特定类别,因此基于名为“blog_category_id”的键的1-1关系。Mysql父子表减少数据库调用或在PHP中合并
现在在我的代码,我会做这样的事情:
//Loop through categories such as
foreach($categories as $cat):
//then for each category create an array of all its posts
$posts = $cat->getPosts(); // This would be another DB call to get all posts for the cat
//do stuff with posts
endforeach;
现在对我来说这似乎是它可以在数据库方面结束了相当昂贵的调用取决于$类别的大小。这仍然是最好的解决方案吗?或者我能够在代码中做些什么,并首先检索所有类别,然后检索所有博客并以某种方式将它们映射到相应的类别?理论上,这只对数据库有两个调用,现在对于调用2(博客)的结果集的大小明智一定会更大,但实际的数据库调用是否会很昂贵?
我通常会选择第一个选项,但我只是想知道是否会有更好的方法来处理这个问题,或者更有可能PHP中的额外处理在性能方面会更昂贵?具体来说,从MVC的角度来看,如果模型返回类别,但它也应该返回该类别的相应博客,但我不确定如何最好地构建这个模型,根据我的理解,模型不应该返回所有数据视图需要?
或者我会更好地选择在第一个查询中使用内部连接的所有类别和博客,并创建我需要的输出?也许通过使用多维数组?
感谢
嗨,感谢您的回复,我知道如何进行连接,但具体而言,我一直在寻找建议,了解使用MVC结构进行此操作的最佳方式应该与最佳性能明智的平衡 – TommyBs 2012-01-13 19:41:14
好吧,MVC不会这里真的对这段代码有任何影响。 MVC是一个整体结构,并不决定数据库设计。 MVC中的'M'可能甚至不会与数据库交谈,但可以使用API等。我已更新我的答案以包含模板代码。 – Treffynnon 2012-01-13 19:48:11
嗨,再次感谢您的回复,我只是使用伪代码来尝试和简化示例来解释我想要的。我知道它不会真正规定数据库设计,但更多的是关于如何构造代码,以及是否有任何性能优势取决于我做的方式(或者这对MVC项目的方式有影响应该是结构)。感谢您填写答案,我是MVC的新手,并没有真正找到关于如何构建的深入教程,主要是展示示例结构的教程。我会玩一玩,并更新问题 – TommyBs 2012-01-13 19:51:51