只是拉扯我的cms并试图简化一些常见的任务,比如搜索。 cms有许多不同的模块,每个模块都可以用动态路由掩盖。
整个系统非常可靠且非常灵活,但这是搜索结果页面令人头疼的地方。
为了保持灵活性,我将基本数据投入到我的搜索类中,如下所示:
$search->addTable('content', array('title', 'excerpt', 'body', 'meta_keywords', 'meta_description'));
$search->addTable('event', array('title', 'description', 'tags'));
然后,我的搜索类从这些变量生成一个 sql查询,这将很好地找到结果(呃,也许'很好'现在不是最好的单词,因为结果集包含来自不同表的行,所以我无法分辨哪一行属于哪个表,因为所有结果都在一个数组中)
问题是,当我想显示结果页面时,我需要为每个结果制作合适的URL,这是非常困难的,因为我上面提到的系统灵活性(任何内容/模块都可以用任何东西掩盖)。
我理解我的问题是非常本地化的,可能太模糊,无法以当前的形式回答它,所以我会尝试澄清我的问题。我没有问你关于我的问题的最佳实践或简单的答案,但如果你能提供一些关于这些基本问题的好建议,我将非常感激:
一如既往,请不要点击关闭,也许我可以更多地澄清一下情景。谢谢你,fabrik。
答案 0 :(得分:1)
简短的回答是,只要我们不说几十个查询就可以完成多个查询。这也意味着返回的结果将是一组集合,其结构类似于上面的数组,表名是该表中一组结果的关键。
我必须指出代码中某个地方有一个点可以组装该数组。组装完成后,您可以遍历它并查询每个表格一次。在该循环中,您拥有所需的所有上下文:表名。
然后将该数组数组返回到将其组合到结果中的客户端。如果表名足以构建URL,那么你就可以了。如果您需要有关每个表的更多信息,例如其ID列的名称,请构造结果数组以包含有关每个表的所需元数据。
总的来说,看起来你的结构很好,并且正试图避免多次查询。别担心。多个查询的问题是在循环中反复查询相同的 *表*时,这是普遍的设计模式然后是性能槽。