我希望我不会扼杀我的问题的解释:
我有一个有数百行的表,每一行都是一个带有营养信息的食谱,例如:
食谱表:
id | calories | protein| carbs | fat
recipe1, 100, 20g, 10g, 2g
recipe2, 110, 10g, 12g, 12g
recipe3, 240, 20g, 1g, 23g
....
我需要创建一个新表 (recipe_index),它将 recipe_table 中每个食谱的所有可能组合显示为一组 3,所以它看起来像:
食谱索引:
id1 | id2 | id3 |calories| protein | carbs | fat
recipe1, recipe2, recipe3, 450, 50g, 23g, 37g
....
基本上它允许我查询 recipe_index 并说“哪 3 种食谱组合的总价值在 440 卡路里和 460 卡路里之间”
我当前执行此操作的代码适用于 3 顿饭,但是我最终在 recipe_index 中有大约 450,000 条记录,我也需要为 4,5 和 6 顿饭做同样的事情,所以我在计算数百万条记录这结束了。有没有更有效的方法来做到这一点?也许我需要研究为每个范围划分一个表?
我当前的 SQL 代码:
INSERT INTO recipe_index
SELECT distinct '3' as nummeals, t1.id as id1, t2.id as id2, t3.id as id3, 0 as id4,
t1.calories_ps+t2.calories_ps+t3.calories_ps as calories, t1.protein_ps+t2.protein_ps+t3.protein_ps as
protein, t1.carbohydrate_ps+t2.carbohydrate_ps+t3.carbohydrate_ps as carbohydrate,
t1.fat_ps+t2.fat_ps+t3.fat_ps as fat from recipes t1 inner join recipes t2 on t1.Id < t2.Id inner join recipes t3 on t2.Id < t3.Id WHERE t1.image <> '' AND t2.image <> '' AND t3.image <> ''
如果我错过了任何明显的事情,请告诉我