【发布时间】:2015-05-14 07:23:05
【问题描述】:
我的数据库中有逗号分隔的字段base_users。如何查询以计算该组的totaluser?如果数据不在逗号分隔的字段中,我计算totaluser 没有问题。
SELECT COUNT(base_u_id) AS totaluser
FROM base_users
WHERE base_u_group =".$row['base_gp_id']."
1)base_users
|base_u_id | base_u_name | base_u_group |
------------------------------------------
| 1 |用户名1 | 1, 2, 4 |
| 2 |用户名2 | 3 |
| 3 |用户名3 | 3, 4 |
| 4 |用户名4 | 1, 4 |
2)base_groups
| base_gp_id | base_gp_name |
------------------------------
| 1 |组1 |
| 2 |组2 |
| 3 |组3 |
| 4 |组4 |
| 5 |组5 |
从上面的示例数据库中,我的预期结果将是:
Total User of group1 = 2
Total User of group2 = 1
Total User of group3 = 2
Total User of group4 = 3
Total User of group5 = 0
这是我迄今为止尝试过的:
<?php
$getUser = base_executeSQL("SELECT * FROM base_users");
while($row_getUser = base_fetch_array($getUser))
{
$explodeData = explode(", ",$row_getUser['base_u_group']);
foreach($explodeData as $data)
{
$getUserGroupSQL = base_executeSQL("SELECT COUNT(base_u_id) AS totaluser FROM base_users as user, base_groups as gp WHERE gp.base_gp_id ='".$data."' ");
while($UserGroupProfile_row = base_fetch_array($getUserGroupSQL))
if (base_num_rows($getUserGroupSQL)!= 0)
$totaluser = $UserGroupProfile_row["totaluser"];
elseif (base_num_rows($getUserGroupSQL)== 0)
$totaluser = 0;
}
}
?>
【问题讨论】:
-
总数就是逗号的个数+1(或者带逗号的字符串长度与不带逗号的字符串长度之差+1)。现在看看标准化
-
更好地修复损坏的数据库设计。它需要规范化
-
@Strawberry 我找到了this。你是这个意思吗?
-
可能,但我误解了这个问题。唯一明智的解决方案是规范化(或者忘记使用 SQL)。