从“选择数组中的位置”查询杂货清单中选择,合并和输出mysql结果

时间:2014-01-17 10:59:03

标签: php mysql

我一直试图建立一个基于收件人的购物清单。

我有两张桌子:

  

食谱:id,recipename

     

recipeingredient:recipeid,ingredientname,ingredientamount,ingredientmeasure

所以我将一个收件人ID列表发送到mysql,我将抓住所有的配方。

这很简单:

 $sql = "SELECT *  FROM recipeingredient where recipeid in $vars2";
foreach loop etc

然而,这个列表有一些我无法做到的要求。

  1. 当id重复时,where将忽略它。我需要它来查询。
  2. 如果食谱是:"butter 200 mg | ingredientname ingredientamount, ingredientmeasure"并且你的结果中有2个,我需要它来合并金额。但是,它必须区分成分测量!
  3. 示例:

    1. 黄油200克
    2. 黄油2支
    3. 输出:黄油200克,黄油2支。

      示例2:

      1. 黄油200克
      2. 黄油2克
      3. 输出:黄油202克

        几乎是一个基于收件人列表的动态,完整的杂货商。

        我在查询中尝试了很多不同的东西,但我不知所措。 在单独查询每个配方后,这是解析输出的最佳方法吗?

        成为php数组的新手,我不知道如何真正做到这一点.. 我可以在javascript中做到这一点,但在一段时间后,它强制它总是咬我的屁股。 这是sqlfiddle

        非常感谢任何指针或帮助! =)

1 个答案:

答案 0 :(得分:1)

所以,你基本上都是这样的,对吗?

SELECT ingredientname
     , SUM(ingredientamount) total
     , ingredientmeasure 
  FROM recipeingredient 
 WHERE recipeid IN (7,8) 
 GROUP
    BY ingredientname
     , ingredientmeasure;

http://sqlfiddle.com/#!2/77420/7

你可以走得更远。例如,一个“rasher”的培根重约。 25g,所以你可以把它考虑在计算中 - 虽然是一个任务!

...并在上面看到我的评论。

要选择相同食谱的倍数,您可能需要做类似的事情......

SELECT recipeid
     , ingredientname
     , ingredientamount
     , ingredientmeasure 
  FROM recipeingredient 
 WHERE recipeid IN (7,8); 

...然后在应用程序级别处理其余的逻辑(例如,使用一些php和/或javascript)