计算mysql字段中的值

时间:2012-03-05 16:37:44

标签: mysql count field

我有一个像这样的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)和许多条件但没有任何作用。 任何帮助都将非常感激!

感谢所有人!

3 个答案:

答案 0 :(得分: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*

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

答案 1 :(得分:0)

您不应该使用字段来存储多个字段,因此MySQL没有拆分功能。

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

答案 2 :(得分:0)

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

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在他的回答中说你需要做一些字符串操作。你可以在db端或客户端执行此操作,如果它只是为了显示(可能更容易,因为你可能有更好的字符串操作库)。 基本上,您需要在currencies字符上拆分*字符串,以便获得类似于["usd", "cad", "euro"]的数组。然后你可以根据需要显示它。