2011-04-21 66 views
0

我被賦予了一個任務,從mysql表中獲取兩個命名爲食物的行。從條件相同的表中選擇兩行

現在,我有一個carbon_footprint列包含所有食物的碳足跡。我現在必須從mysql表中隨機選擇兩行,但有一個條件。

這兩個值應該有一個碳足跡的百分比差異大於70%。

我現在所能做的最好的是:

Select a.* from foods a CROSS JOIN foods b on ((a.co2 - b.co2)/b.co2) >= 0.7 ORDER BY RAND() LIMIT 2

但不知何故,我沒有得到正確的答案。我知道我錯過了一些非常愚蠢的事情。

請幫忙!

+2

您將'a'中的食物與'b'中的食物進行比較,但不會返回'b'中的任何結果。換句話說,你想選擇一種「a」食物和一種「b」食物來獲得它們之間正確的70%差異。 – 2011-04-21 18:04:32

+0

你沒有得到正確的答案,那麼你會得到什麼答案? – invertedSpear 2011-04-21 18:16:50

+0

嘗試...選擇*從食物a,食物b在哪裏((a.co2 - b.co2)/b.co2)> = 0.7 ORDER BY RAND()LIMIT 2 – user559142 2011-04-21 18:21:02

回答

0

我測試的功能初級講座與在DB表下列值: DataTable1

運行內部查詢沒有LIMIT或ROUND()調回來。

SELECT 
       FoodName1 = A.FoodName 
      , Food1Co2 = A.co2 
      , FoodName2 = B.FoodName 
      , Food2Co2 = B.co2 
      , Number = ABS(((A.co2 - B.co2)/(A.co2))) 
     FROM TB as A 
     CROSS JOIN TB B 

DataTableResults

最後查詢所有起來就是:

SELECT * , ABS(((tt.Food1Co2 - tt.Food2Co2)/(tt.Food1Co2))) 
FROM (
    Select 
       FoodName1 = A.FoodName 
      , Food1Co2 = A.co2 
      , FoodName2 = B.FoodName 
      , Food2Co2 = B.co2 
      , Number = ABS(((A.co2 - B.co2)/(A.co2))) 
     FROM TB as A 
     CROSS JOIN TB B 
) tt 
WHERE ABS(((tt.Food1Co2 - tt.Food2Co2)/(tt.Food1Co2))) >= 0.7 
ORDER BY RAND() LIMIT 2 

注意我是如何加入ABS()給你的函數,因爲您的查詢將有底片顯示,所以你需要刪除並將所有事情都轉化爲積極的態度,然後做RAND()LIMIT。希望這可以幫助。