【问题标题】:Comparing quantities across two tables比较两个表中的数量
【发布时间】:2013-07-15 12:35:50
【问题描述】:

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

我想比较这两个表,如果至少有一行剩余的项目低于成本,则返回 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 中可行吗?

【问题讨论】:

    标签: sql pdo


    【解决方案1】:

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

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

    has_enough 的值要么是0(一种成分不够)要么是1(所有成分都存在)。

    【讨论】:

    • 一个问题是成本表中给定的 materialID 可能有多种成分,我忘了提到我将编辑我的问题!对不起:P
    • @Dave 更新了答案。
    • 完美!谢谢@杰克
    【解决方案2】:

    成分数量:

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-19
      相关资源
      最近更新 更多