Complexes Units Amenities Pictures Links Documents Events Agents
这些是上述对象之间的关系.
Complexes have a single Agent. Complexes have multiple Units,Amenities,Pictures,Links,Documents,and Events. Units have multiple Pictures,and Documents.
设施,图片,链接,文档和事件都在数据库中具有必要的外键,以指定它们属于哪个单元/复合体.
我需要将必要的对象从数据库加载到PHP中,以便我可以在我的项目中使用它们.
如果我尝试在1个查询中从表中选择所有数据,使用LEFT JOINS,我将获得每个唯一单元的至少(链接数)*(图片数)*(文档数)行.添加设施和活动,我将获得所有*设施*每个复杂的事件#…不确定我想尝试处理加载到PHP中的对象.
另一种可能性是每个复杂/单元,为链接,文档,事件和便利设施执行1个单独的sql语句
我的问题如下:
如果我正确索引所有表格,那么为每个复杂/单位执行3-5个额外查询真的是一个坏主意吗?
如果没有,我怎样才能获得加载到PHP对象中所需的数据.理想情况下,我会为单位设置如下对象:
Unit Object ( [id] [mls_number] [type] [retail_price] [investor_price] [quantity] [beds] [baths] [square_feet] [description] [featured] [year_built] [has_garage] [stories] [other_features] [investor_notes] [tour_link] [complex] => Complex Object ( [id] [name] [description] etc. ) [agent] => Agent Object ( [id] [first_name] [last_name] [email] [phone] [phone2] etc. ) [pictures] => Array ( [1] => Picture Object ( ) ) [links] => Array ( [1] => Link Object ( ) ) [documents] => Array ( [1] => Document Object ( ) ) )
我不总是需要所有这些信息,有时我只需要复杂的主键,有时我只需要代理的主键等.但我认为正确的方法是加载整个每次我实例化它的对象.
我一直在对OO PHP进行大量研究,但大多数(阅读全部)在线示例仅使用1个表.这显然无济于事,因为我正在研究的项目有很多复杂的关系.有任何想法吗?我在这里完全不合适吗?
谢谢
[UPDATE]
另一方面,通常在每个人都会看到的前端,我将需要所有的信息.例如,当有人想要关于特定复合体的信息时,我需要显示属于该复合体的所有单元,所有图片,复合体的事件以及该单元的所有图片,文档和链接.
我希望避免的是,在一个页面加载期间,执行一个查询以获得我需要的复杂.然后是另一个查询,以获得与该复合体相关联的20个单元.然后对于20个单元中的每个单元,执行图片查询,另一个用于文档,另一个用于链接等.我想一次性获取它们,一次通过数据库.
[编辑2]
另请注意,从数据库中选择图片,事件和代理的查询非常简单.只是基本SELECT [列列表] FROM [table] WHERE [primary_key] = [value]偶尔INNER JOIN.我不做任何复杂的计算或子查询,只是基本的东西.
[BENCHMARK]
所以在阅读了我的问题的所有答案之后,我决定对我决定做的事情进行基准测试.我所做的是加载我需要的所有单位.然后,因为我需要显示图片,等等等等,我当时加载它们.我创建了30,000个测试单元,每个单元有100张图片,100个文档和100个链接.然后我加载了一定数量的单位(我从1000开始,然后是100,然后是更真实的10),循环浏览它们,然后加载与单元相关的所有图片,文档和链接.有1000个单位,大约需要30秒.有100个单位,花了大约3秒钟.有10个单位,花了大约0.5秒.结果存在很多差异.有时,有10个单位,需要0.12秒.然后需要.8.然后也许.5.然后.78.真的到处都是.然而,它似乎平均大约半秒钟.但实际上,我可能一次只需要6个单元,而且它们每个可能只有10个图片,5个链接和5个与之相关的文档…所以我认为“在需要时抓取数据”的方法是在这种情况下最好的选择.如果你需要一次性获取所有这些数据,那么有必要提出一个sql语句来加载你需要的所有数据,这样你只需要循环数据一次(6700个单位一次需要217秒)而全部30,000个PHP使内存不足).