我想在这里通过代码标识的每个广告,获取与他相关联的账单数量(法语:制造)。
例如,在这里,对于数据库的这一部分,我想要具有以下内容:R08:22; R087:19; R11:3; R00:3; R062:1; R026:1;
商业代码以“ R”开头,后跟几个数字,如果账单与多个商业广告相关联,则“ |”分隔代码。顺便说一下,大多数账单只与一个商业广告有关。
我的问题是仅使用SQL来做到这一点。 如果过于复杂,我将使用PHP。
我希望我的问题是可以理解的,并且您会知道如何帮助我。
另一个数据示例:
R015 15040205
R012 14250123
R012|R038 14250123
R015|R012 14250123
R005 14250123
我想返回一个查询:
R005 1
R038 1
R015 2
R012 3
实际上,我想要一个查询,它计算每个代码的出现次数。 第二个数据无关紧要
答案 0 :(得分:1)
如果您最多有两个代码(如示例数据中所示),则可以使用substring_index()
:
select code, count(*)
from ((select substring_index(code_commercial, '|', 1) as code
from t
) union all
(select substring_index(code_commercial, '|', -1)
from t
where code_commercial like '%|%'
)
) c
group by code;
更重要的一点是,您的数据模型确实非常非常糟糕。您应该修复它。 SQL并非设计为在单个列中存储多个值,也不设计为使用字符串来存储此类数据。
您需要一个联结表,每个代码具有单独的行。这样您的查询将更易于编写和运行。