Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 动态搜索,生成搜索结果链接(反向路由)_Sql_Search_Seo - Fatal编程技术网

Sql 动态搜索,生成搜索结果链接(反向路由)

Sql 动态搜索,生成搜索结果链接(反向路由),sql,search,seo,Sql,Search,Seo,只是拉我的cms的皮条,并试图简化一些常见的任务,如搜索。cms有许多不同的模块,每个模块都可以用动态路由屏蔽 整个系统相当可靠,而且非常灵活,但这正是搜索结果页面令人头痛的地方 为了保持灵活性,我在搜索类中添加了如下基本数据: $search->addTable('content', array('title', 'excerpt', 'body', 'meta_keywords', 'meta_description')); $search->addTable('event',

只是拉我的cms的皮条,并试图简化一些常见的任务,如搜索。cms有许多不同的模块,每个模块都可以用动态路由屏蔽

整个系统相当可靠,而且非常灵活,但这正是搜索结果页面令人头痛的地方

为了保持灵活性,我在搜索类中添加了如下基本数据:

$search->addTable('content', array('title', 'excerpt', 'body', 'meta_keywords', 'meta_description'));
$search->addTable('event', array('title', 'description', 'tags'));
然后,我的搜索类将从这些变量生成一个sql查询,它将很好地找到结果(呃,也许“很好”现在不是最好的词,因为结果集包含来自不同表的行,所以我无法区分哪一行属于哪一个表,因为所有结果都在一个数组中)

问题是,当我想显示结果页面时,我需要为每个结果制作适当的URL,这非常困难,因为我上面提到的系统灵活性(任何内容/模块都可以用任何东西屏蔽)

我知道我的问题是非常本地化的,可能太模糊了,无法以当前的形式回答,所以我将尝试澄清一下我的问题。我不会问你关于我的问题的最佳实践或简单答案,但如果你能为我提供一些关于这些基本问题的好建议,我将不胜感激:

  • 看起来生成一个查询并不是最好的方法,因为我不知道哪一行属于哪一个表(不同的表可能意味着不同的url制作方法)。另一种方法是分别查询每个表,并将结果存储在多维数组(键的表名)中。AFAIK在foreach循环中查询sql不是一种可接受的方法。是否可以在单个查询中标记每个结果行以反映其表名
  • 如果我不为这些结果设计真实的(屏蔽的,路由的)url,但我显示非常基本的url,比如(example.com/content/nice url slug),这会损害我的SEO吗。谷歌可能会因为重复而惩罚我的网站——这对我来说是不好的

和往常一样,请询问而不是单击“关闭”,也许我可以进一步澄清一下情况。谢谢你,法布里克。

简短的回答是,只要我们不讨论几十个问题,就可以进行多个查询。这也意味着返回的结果将是一组集合,其结构类似于上面的数组,表名是该表中一组结果的键

我必须指出,在代码中的某个地方,数组是在那里组装的。组装完成后,您可以循环遍历它并精确地查询每个表一次。在该循环中,您拥有所需的所有上下文:表名

然后将该数组返回给正在将其组装成结果的任何客户端。如果表名足以构建URL,那么您就可以开始了。如果您需要有关每个表的更多信息,例如其ID列的名称,请构造结果数组以包含每个表所需的元数据

总的来说,看起来您的结构很好,并且在尝试避免多个查询时被绊倒了。别担心。多个查询的问题是,当同一个*表*在一个循环中被反复查询时,当这是普遍的设计模式时,性能就会下降