2014-01-17 49 views
1

我卡住試圖建立一個基於收益的購物清單。選擇,合併和輸出MySQL的結果從一個「選擇數組中的位置」查詢

我有2個表:

配方:ID,爲recipename

recipeingredient:recipeid,ingredientname,ingredientamount,ingredientmeasure

所以我送recipie ID年代到列表MySQL我在哪裏抓住所有配方成分。

這是很簡單的:

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

但是,也有一對夫婦的要求,這個列表,即時通訊無法做到。

  1. 當一個id是重複的,在哪裏將忽略它。我需要它被查詢。
  2. 如果配方成分是:"butter 200 mg | ingredientname ingredientamount, ingredientmeasure",並且您的結果中有2個,我需要它來合併金額。但是,它必須區分成分測量!

實施例:

  1. 黃油200克
  2. 黃油2支

輸出:黃油200克,黃油2個棒。

例2:

  1. 黃油200克
  2. 黃油2克

輸出:黃油202克

差不多基於一個動態的,完整的grocerylist收件人列表。

我已經嘗試了很多與查詢不同的事情,但我很茫然。 在查詢每個配方後,分析輸出是否是最好的方法?

作爲新的php陣列,我不知道如何真正做到這一點.. 我可以做到這一點的JavaScript,但bruteforcing它總是咬我屁股後一段時間。 這是sqlfiddle

任何指針或幫助,非常感謝! =)

+0

recipe_ingredient應該是這樣的:recipe_ingredient(recipe_id *,ingredient_id *,quantity,unit [或unit_id])'*'=(組件的)PRIMARY KEY – Strawberry

回答

1

所以,你基本上是在這樣的事情之後,對吧?

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

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

你可以走得更遠。例如,「培根」培根重約。 25克,所以你可以將它歸因於計算 - 雖然有一點任務!

...看到我上面的評論。

選擇同一配方的倍數,你可能需要做這樣的事情...

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

...然後在應用層處理邏輯的其餘部分(例如用位(或者javascript)

+0

Heya,謝謝你的回覆!這是非常正確的,但是這也忽略了類似的ID ..所以,如果我有2個配方ID爲7,它不會輸出超過1個。 – Havihavi

+0

這將是,SUM(ingredientamount * countnumberofsimilarrows) – Havihavi

+0

我不會說你*不能*用MySQL做到這一點,但我不確定我知道如何,另外,這樣做可能不合適。問題的這一方面可能最好在應用程序級別處理。 – Strawberry