2011-04-21 64 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。希望这可以帮助。