【问题标题】:Count values in a mysql field计算 mysql 字段中的值
【发布时间】:2012-03-05 16:37:43
【问题描述】:

我有一个这样的 mysql 表,其中货币通过复选框和 php 存储在数据库中

product       currencies
-----------   --------------
prod_name_1   *usd*cad*euro*
prod_name_2   *usd*cad*
prod_name_3   *usd*cad*euro
prod_name_4   
prod_name_5   *usd*

我想通过查询计算字段中的货币。 预期结果:

product       currencies count
-----------   ----------------
prod_name_1   3
prod_name_2   2
prod_name_3   3
prod_name_4   0
prod_name_5   1

如何查询我的数据库以获得此结果? 我尝试了许多带有许多条件的函数(包括 COUNT 和 SUM),但没有任何效果。 任何帮助将不胜感激!

谢谢大家!

【问题讨论】:

  • 这不是标准化设计。

标签: mysql count field


【解决方案1】:

根据您的 NON-NF1 数据,您需要一个字符串操作函数来计算不同的货币。

试试这样的:

select product,
       CAST((LENGTH(currencies) - LENGTH(REPLACE(currencies, '*', ''))) / LENGTH('*') AS UNSIGNED) AS currencies_count
  from YOUR_TABLE

问题是,您需要以连贯的方式表示您的数据。即:

*usd*cad*euro

必须始终以这种方式表示而不是:

*usd*cad*euro*

否则,您计算的货币数量将超过您的数量。

【讨论】:

  • 感谢大家的回复!是的,我知道我必须以这种方式(usdcadeuro)表示数据,但我不能。我使用以这种方式存储数据的外部组件(在 joomla 中)。有一种方法可以忽略(计数)''分隔符(最后一个值)之后的空格吗?
【解决方案2】:

你不应该使用一个字段来存储多个字段,所以 MySQL 没有拆分功能。

相反,创建另一个包含 2 个字段(产品 ID 和货币 ID)的表。您可以通过加入 (SELECT p.product_name, COUNT(c.currency_) FROM products p JOIN productconcurrencies c ON p.product_id=c.product_id) 计算您的产品的货币。

【讨论】:

    【解决方案3】:

    首先,我建议您以不同的方式存储您的数据(如果可能的话)。 如果你这样存储它:

    product      currencies
    -----------------------
    prod_name_1  usd
    prod_name_1  cad
    prod_name_1  euro
    

    然后您可以轻松地执行一个简单的 sql count where product='prod_name_1'(当然,具体查询取决于您)。 编辑:正如 tstenner 指出的那样,您应该为您的货币使用单独的表格并使用外键。我的例子只是逻辑表示。

    如果这不是一个选项,就像@Pablo Santa Cruz 在他的回答中所说的那样,你需要做一些字符串操作。如果只是为了显示,您可以在数据库端或客户端执行此操作(可能更容易,因为您可能会有更好的字符串操作库)。 本质上,您需要将currencies 字符串拆分为* 字符,以便获得类似于["usd", "cad", "euro"] 的数组。然后就可以随意显示了。

    【讨论】:

      猜你喜欢
      • 2013-12-27
      • 2017-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-14
      • 1970-01-01
      • 1970-01-01
      • 2017-01-08
      相关资源
      最近更新 更多