从2个数据库中选择数据时的分页结果

时间:2011-05-13 06:56:27

标签: database web-services

您好
我有一个连接到一个数据库的Web服务,它有一个名为clients的表,它有一些数据 我有另一个连接到另一个数据库的Web服务,该数据库有一个名为clientdetails的表,其中包含一些其他数据 我必须返回一个分页的客户端列表,每个客户端对象都包含两个表中的信息 但我有一个问题 必须在两个表格上应用搜索条件 所以基本上在客户表中我可以拥有属性:
cprop1,cprop2
在clientdetails表中我可以有cdprop1,cdprop2
我的搜索条件可以是cporp1 = something,cdprop2 = somethingelse

我打电话给第一个网络服务并发送标准cporp1 =某事项 它返回一些信息,然后我在第二个Web服务中调用该方法但是如果我必须返回页面上的10个项目,并且第二个Web服务的条件应用于第一个Web服务选择的10个项目(cdprop2 = somethingelse)然后我可能会留下8件或根本没有 那么在这种情况下我该怎么做? 我如何确保始终获得正确数量的项目(这与用户在页面上所说的一样多)?

2 个答案:

答案 0 :(得分:0)

在您有两个回复之前,您不知道要显示多少条记录。

你没有使用什么样的数据库访问,你暗示你要求“N条记录匹配条件X”,你将N设置为10.在某些数据库访问机制中,你可以要求所有匹配的记录然后通过集合推进“游标”,因此您不需要设置任何上限 - 我们假设数据库负责为这样的查询有效地管理资源。

如果你不能这样做,那么你需要能够重新访问第一个数据库,询问接下来的10个记录,重复直到最后你有一个页面已满或者找不到更多的记录。这要求您有一些方法为“next 10”指定查询。

您需要能够以某种有效的方式获取符合条件的所有记录,无论是通过数据库提供的某种游标机制还是通过您自己的“分页”查询,没有该功能我看不到保证的方法给出准确的结果。

答案 1 :(得分:0)

我发现在这样的情况下,最好不要使用身份主键,而是使用第二个数据库中生成的值的主键(在第一个数据库中生成)。
至于搜索,您应该从第一个数据库中搜索符合条件的前1000个项目,将它们与第二个数据库中与给定条件匹配的前1000个项目相交,并从该交叉点返回所需数量的项目。 您的查询永远不会以任何方式返回无限量的项目,因此1000应该这样做。当然,这个数字可能更大或更小。