我有一个设置,其中一个表列出了项目的成本。另一个表列出了剩余的项目数量。
我想要比较两个表,如果至少有一行剩下的项目小于成本,则返回false。
表示设置示例:
table for costs
//note there can be multiple ingredients per materialID
ID | materialID | IngredientID | quantity_per_one
1 | 4 | 5 | 50
table for user's available ingredients
ID | UserID | IngredientID | quantity
2 | 3 | 5 | 46
下面是一个示例场景:
用户购买5 x materialID: 4
这意味着它将花费他:(50 x 5) of IngredientID 5
,如果上面的数据,他显然没有足够的,因此结果应该返回false或没有count()
的行。
现在我的当前方法是在PHP中获取行循环并逐个检查,但是如果我可以通过SQL直接进行比较,那么我可以省去循环。
这在SQL中是否可行?
答案 0 :(得分:1)
只需根据IngredientID
列加入两个表:
SELECT MIN(quantity_per_one * 5 <= quantity) AS has_enough
FROM costs
INNER JOIN user_ingredients USING (IngredientID)
has_enough
的值是0
(成分不够)或1
(所有成分都存在)。
答案 1 :(得分:0)
成分数:
SELECT count(id) FROM costs WHERE material = 4;
计算:
SELECT count(i.id) FROM costs as c, ingredients as i
WHERE i.ingredient = c.ingredient AND i.quantity >= (c.per * 2);
如果它们相同,则用户有资格购买该材料。
SqlFiddle: http://sqlfiddle.com/#!2/5bcba/11