0

我有一个设置,其中一张表列出了物品的成本。另一个表列出了剩下的这些项目的数量。

我想比较这两个表,如果至少有一行剩余的项目小于成本,则返回 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 立即执行camparison,它将节省我执行循环的时间。

这在 SQL 中可能吗?

4

2 回答 2

1

只需根据IngredientID列连接两个表:

SELECT MIN(quantity_per_one * 5 <= quantity) AS has_enough
FROM costs
INNER JOIN user_ingredients USING (IngredientID)

的值has_enough0(一种成分不够)或1(所有成分都存在)。

于 2013-07-15T04:17:12.890 回答
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

于 2013-07-15T04:35:50.623 回答