【发布时间】:2018-06-13 11:53:18
【问题描述】:
Q.1) 假设我有一个名为 advertisements 的表,其字段 ad_memberships 包含逗号分隔的 1,2,3,4 类型值,我想计算每个值的总行数,那么如何我这样做?比如表中包含值 1 的总行数为 10,2 为 5,3 为 15,4 为 3 等,而无需在 FIND_IN_SET() 函数中手动输入数据?我只想为所有人自动计算。这里,1,2,3,4 来自一个名为 memberships 的表,其中这些是不同行的唯一 ID mbs_id。
Q.2)这与第一个问题有关,两者需要一起完成。我单独写它是为了清楚易懂。所以,假设我还有一个名为ads_category 的表,其中包含字段ac_id 和ac_value。这个ac_id 被插入到第一个表advertisements 的ads_category 字段中,以便所有广告都与某个不同的类别相关。现在在计算第一个问题中的行之后,我想将ac_value 与第一个问题中收到的行数相乘,并显示结果如下。
Standard Membership: 10 ads (Value: $5)
Premium Membership: 16 ads (Value: $12)
Elite Membership: 8 ads (Value: $7)
Ultimate Membership: 11 ads (Value: $8)
and so on....
这意味着对于拥有标准会员资格的会员,有 10 个广告可供持有高级会员资格的会员使用,有 16 个广告可供使用,依此类推。我怎样才能做到这一点?例如,数据库结构如下:
表格:成员资格
mbs_id | mbs_name
1 | Standard
2 | Premium
3 | Elite
4 | Ultimate
表格:广告
ad_id | ad_memberships | ad_category
1 | 1,2 | 1
2 | 1,2,3 | 1
3 | 1,3 | 2
4 | 2,3 | 3
表格:ads_category
ac_id | ac_value
1 | 0.5
2 | 1
3 | 1.5
4 | 2
上述数据库结构的预期结果
Standard : 3 ads (Value: $1.5)
Premium : 3 ads (Value: $3)
Elite : 3 ads (Value: $4.5)
Ultimate : 0 ads (Value: $0)
现在我想加入所有三个表并获得相关结果。是的,不能在查询中手动输入任何值。一切都应该使用数据库中的值来完成。我怎样才能做到这一点?我正在使用 PDO。请帮忙。
【问题讨论】:
-
@TimG 如何让它自动化?在这里,如果我使用
select Id from Item where instr(concat(',', Features, ','), ',AB,') <> 0 or instr(concat(',', Features, ','), ',PQ,') <> 0查询,我需要手动输入值,并且值也可以增加、减少或删除
标签: php mysql sql sql-server