【问题标题】:Selecting two rows from same table with condition使用条件从同一个表中选择两行
【发布时间】:2011-04-22 03:19:35
【问题描述】:

我有一个任务是从名为 food 的 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

但不知何故,我没有得到正确的答案。我知道我错过了一些非常愚蠢的东西。

请帮忙!

【问题讨论】:

  • 您将a 中的食物与b 中的食物进行比较,但未返回来自b 的任何结果。换句话说,您想选择一种a 食物​​和一种b 食物来获得它们之间正确的70% 差异。
  • 你没有得到正确答案,那么你得到了什么答案?
  • Try...SELECT * FROM foods a, foods b WHERE ((a.co2 - b.co2)/b.co2) >= 0.7 ORDER BY RAND() LIMIT 2
  • @user559142 - 考虑将其发布为答案
  • @user559142,甚至... not between 0.7 and 1/0.7。而且您只需要limit 1,因为两条记录都在一行中返回。

标签: php mysql database


【解决方案1】:

我在 db 表中使用以下值测试了以下函数:

在没有 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

最后查询全部是:

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。希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-10
    相关资源
    最近更新 更多