我遇到了一个有趣的问题,我不太清楚如何解决它 - 因此我们走了。
假设我有一个表A:LISTINGS 和一个表B:产品。清单和产品是两个独立的表,具有完全不同的列,并且具有自己的连接以向其提取相关信息。
相似之处在于两个表都有价格列,但在不同的列名下维护此信息。 我想要做的是从两个表格的合并数据集中撤回一些最便宜的价格。
鉴于两个不同表的连接最终非常不同,我开始编写两个不同的SELECT语句。然后我为每个表订购了ASC的价格,合并了两个查询的结果,并再次按价格对结果数组进行了排序。
这里固有的缺陷当然是来自每个SELECT语句的数据集对于它们自己的数据池是唯一的。简而言之,每个SELECT的最终价格等级仅适用于该特定数据集,但与两个表格的总体结果相比较时则不然。当您向数据集发出多个请求以获取分页行时,此问题会被放大。
鉴于使用两个单独查询的限制,我认为唯一的解决方案是将查询编写为一个SELECT,以便数据集保持不变,无论使用LIMIT还是查询数据库以获取更多数据。我很难理解如何编写一个单独的查询,从两个完全不同的表中收集数据( all,同时连接许多其他表上的每个表)并在同一个SELECT语句中的一列中进行比较。
理想情况下会发生以下情况:
表A:列表
表B - 产品
对于两个最便宜的价格的第一次调用只会从表A中拉回 第2行和第3行 。
下一次调回以取消接下来两个最便宜的价格将从表A中拉出 第1行,从表B中提取第3行 。
下一个电话会从表B中提取 第2行和第1行 。
最后,最后一次调用将从表B中 第4行 ,并通知用户在两个表之间没有更多结果可以撤回。
如果有任何需要进一步澄清,请告诉我!
答案 0 :(得分:1)
您似乎在寻找UNION
运营商。您最终可能会编写类似这样的查询:
SELECT
name,
price
FROM (
SELECT
listings.name AS name,
listings.price AS price
FROM
listings
[JOIN ...]
[WHERE ...]
ORDER BY
price
LIMIT 2
UNION ALL
SELECT
products.name AS name,
products.price AS price
FROM
products
[JOIN ...]
[WHERE ...]
ORDER BY
price
LIMIT 2
)
ORDER BY price
LIMIT 2