我被困在这里......我有相同格式的 6 表: sku ,价格,股票即可。
我无法找出查询以获得至少2个表(基于sku作为PK)的所有结果,然后应用规则:获取库存中的最小价格> 0,或者如果所有股票= 0采取最小的价格。
LE:让我们说t1和t2有一些共同的记录,t2和t6有一些共同的记录,我想要的是收集所有这些结果然后过滤它们上面的规则。我已经构建了一个PHP脚本来处理上述情况,但在高度索引的数据库上大约需要10秒钟。我们在这里谈论分布在不同表格上的50.000条记录和一个非常强大的VPS ...我的PHP脚本需要大约250MB的RAM和大约10s才能完成。问题是如果服务器上有大量流量,脚本将失败并返回500服务器错误。我需要让它更快,我认为我必须重新设计查询只是为了节省资源。
非常感谢任何想法!
答案 0 :(得分:1)
使用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