我有一个像这样的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)和许多条件但没有任何作用。 任何帮助都将非常感激!
感谢所有人!
答案 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"]
的数组。然后你可以根据需要显示它。