我被卡在这里...我有6种桌子,格式相同:sku,价格,库存。
我无法找出一个查询来获取至少2个表共有的所有结果(基于sku作为PK),然后应用以下规则:在库存> 0或所有库存= 0的情况下获取最小价格采取最小的价格。
LE:假设t1和t2有一些共同的记录,t2和t6有一些共同的记录,我想要的是收集所有这些结果,然后按照上述规则过滤它们。我已经构建了一个可以解决上述情况的PHP脚本,但是在高度索引的数据库上大约需要10秒钟。我们在这里谈论的是分布在不同表上的50.000条记录和一个功能非常强大的VPS ...我的PHP脚本需要大约250MB的RAM和大约10s的时间来完成。问题是,如果服务器上的流量很大,脚本将失败并返回500服务器错误。我需要使其更快,并且我认为我必须重新设计查询以节省资源。
非常感谢您的任何想法!
最佳答案
使用union all
将表放在一起,然后进行汇总:
select sku,
(case when sum(stock > 0) > 0
then min(case when stock > 0 then price end)
else min(price)
end) as price
from (select sku, price, stock, 'table1' as which from table1 union all
select sku, price, stock, 'table2' as which from table2 union all
select sku, price, stock, 'table3' as which from table3 union all
select sku, price, stock, 'table4' as which from table4 union all
select sku, price, stock, 'table5' as which from table5 union all
select sku, price, stock, 'table6' as which from table6
) t
group by sku
having count(distinct which) >= 2
价格的“花式”逻辑应在您的问题中实施。
编辑:
如果您想以最低价格购买库存,我认为可以做到以下几点:
select sku,
(case when sum(stock > 0) > 0
then min(case when stock > 0 then price end)
else min(price)
end) as price,
substring_index(group_concat(stock order by (stock > 0) desc, price), ',', 1) as stock
关于mysql - 选择几个表的每个EACH 2表之间共有的所有值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27408874/