【问题标题】:Need help figuring out MySQL query to count if a certain number需要帮助找出 MySQL 查询以计算某个数字
【发布时间】:2012-12-30 05:02:30
【问题描述】:

我有一个这样的表设置:

fruit1 | fruit2 | fruit3 | fruit4 | number1 | number2 | number3 | number4
--------------------------------------------------------------------------
apple  | orange | banana |  berry |    5    |    2    |    1    |    4   
orange | banana | apple  |  berry |    3    |    2    |    5    |    2
berry  | banana | orange |  apple |    1    |    2    |    5    |    2

我需要一个 MySQL 查询来计算给定水果有多少次是 5。在这个例子中,苹果是 5 两次,橙子是 5 一次。那有意义吗? fruit1 的编号是 number1,fruit2 的编号是 number2,以此类推……

我可以用一点 php 代码做到这一点,但我知道这是一个非常简单的 MySQL 查询。我只是很难将查询放在一起。

提前致谢!

【问题讨论】:

  • 您遇到了困难,因为您的表格未正确规范化。
  • 0_o(我同意 Jack,确实是奇怪的模式!)
  • 如果你必须像这样给你的列编号,你做错了。这就像如果您的程序中有变量名为$thing1$thing2$thing3,它们应该在一个名为$things 的数组中。在这种情况下,因为您有一组名为fruit1、fruit2、fruit3 的列,所以您应该有一个水果子表。
  • 我很好奇你们认为我应该如何以不同的方式组织我的数据库。我有一个表单,用户可以从下拉列表中选择最多 5 种水果,然后从 1 到 5 对每种水果进行评分。然后将选择和评分作为 1 条记录写入表中。所有的水果都是独一无二的。你们是说我应该有两个不同的表,它们之间有一个共享列,比如日期/时间之类的吗?一张水果表和一张数字表?我不确定这会让事情变得更容易,所以我可能不明白你的建议。感谢 cmets。
  • 有一个包含formidfruitrating 列的表,其中formidfruit 作为主键。用户选择的每个水果都将是该表中的不同行,formid 代表该用户的表单。

标签: php mysql sql count


【解决方案1】:
SELECT fruit, COUNT(*) NumberOfInstance
FROM
(
    SELECT fruit1 fruit, number1 num FROM table1
    UNION ALL
    SELECT fruit2 fruit, number2 num FROM table1
    UNION ALL
    SELECT fruit3 fruit, number3 num FROM table1
    UNION ALL
    SELECT fruit4 fruit, number4 num FROM table1
) s
WHERE num = 5
GROUP BY fruit

【讨论】:

  • 效果很好,谢谢!我想我需要在我的餐桌组织上工作。感谢您的快速帮助。
  • 所以我一直试图弄清楚如何修改查询以显示每个水果的所有数字。所以我会得到一张表格,上面显示:水果 | 5 的 | 4个 | 3个 | 2个 | 1 的苹果 | 2 | 0 | 0 | 1 | 0 香蕉| 0 | 0 | 1 | 1 | 1 ...这是对查询的简单补充吗?还是这会让事情变得更复杂?
  • 我试过了,但并没有达到我的预期。如果我删除“Where num = 5”,我仍然只会得到两列。在示例中,所有水果的数字都是 3。
  • @JackHillard 是的,因为如您所见,子查询仅返回两列。最好针对这些变化提出一个新问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多